对卡皮斯特拉诺来说很新。
我有一个本地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 repo中包含了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
路径是远程服务器的本地路径。
答案 0 :(得分:1)
首先:Capistrano始终在您正在部署的远程服务器上执行 命令。
这意味着您在set :deploy_to
中使用的所有路径都是服务器上的本地路径。
在我的情况下,配置看起来像这样:
set :scm, 'git'
set :repository, "<repo url>"
set :branch, 'master'
set :git_shallow_clone, 1
set :scm_verbose, true
set :deploy_to, '/var/www/app'
set :deploy_via, :remote_cache
这里的重要部分是:deploy_to
,它是服务器上的本地路径而不是SSH路径。 这是您的配置错误的地方!
如果你看一下capistrano然后运行的命令,这就变得更加重要。例如,它通常会执行bash cd /var/www/app && bundle instal ...
之类的操作。
如果路径不是本地路径,则命令很可能会失败。
其次这也意味着Capistrano将从您的远程服务器部署到您的Git服务器,,因此您必须确保远程服务器可以访问Git服务器。
因此ssh_options[:keys]
指定用于连接到该remote_server的本地SSH密钥,而在服务器上将使用~/.ssh/id_rsa.pub
的默认密钥。
您可以通过包含ssh_options[:forward_agent] = true
来使用SSH代理转发来避免在服务器上设置SSH密钥。这只会将您的本地SSH代理套接字转发到服务器并使用它(很好,因为您的密钥永远不会离开您的机器)
有关SSH代理转发的更多信息,请访问here
答案 1 :(得分:0)
要检查:
在远程服务器中检查.ssh文件夹,并确保将ssh密钥(id_rsa.pub)添加到授权密钥中,且不附加空格。
从您运行cap脚本的本地文件夹中执行ssh-add。
检查远程的.ssh文件夹的权限,它应该是700,文件里面有600权限。
If I change the Capistrano configuration to clone from the remote git folder to which I push (which is in that same server) then I don't get an error but it asks for my password every time I try to connect.
现在从git克隆它,