Capistrano 完全陌生。
我有一个要发布到远程服务器的本地 git 存储库。我在这里遵循了其他答案并提出了以下配置:
require 'bundler/capistrano'
set :application, "app_name"
set :repository, '~/Dropbox/app/.git'
set :user, 'user_name'
set :deploy_to, 'ssh://remote_host/~/railsApps/app_name'
set :scm_verbose, true
set :deploy_via, :copy
default_run_options[:pty] = true
server "remote_server", :web, :app, :db, :primary => true
set :scm, :git
set :branch, "master"
ssh_options[:keys] = %w(~/.ssh/id_rsa)
after "deploy:restart", "deploy:cleanup"
这不再要求远程服务器的密码,但总是失败并出现以下错误:
The --deployment flag requires a Gemfile.lock. Please make sure you have checked your Gemfile.lock into version control before deploying.
我肯定在我的 git 存储库中包含了 Gemfile.lock 文件。
如果我将 Capistrano 配置更改为从我推送到的远程 git 文件夹(位于同一服务器中)进行克隆,那么我不会收到错误消息,但每次我尝试连接时都会询问我的密码。
请帮忙。
请注意,从 CLI 用于常规 SSH 连接时,SSH 密钥配对可以正常工作。
解决方案
感谢 Tigraine,我能够解决它。希望这对其他人有所帮助,这就是最终的诀窍:
Tigraine 是正确的,因为路径是远程服务器的本地路径,但是在尝试使用本地路径时出现错误,Capistrano 一直在我的本地计算机上搜索并在找不到这些路径时抛出错误。
我所要做的就是将其添加local_repository
到配置中,然后一切正常。所以我改变的位是这些:
set :local_repository, '~/Dropbox/app_name/.git'
set :repository, '~/railsApps/app_name.git'
set :deploy_to, '~/railsApps/app_name'
该local_repository
路径在我的机器上是本地的,repository
并且deploy_to
路径在远程服务器上是本地的。