Ruby on rails Capistrano本地git存储库克隆到远程请求密码,而不考虑SSH密钥
对卡皮斯特拉诺来说是全新的 我有一个本地git存储库,我想发布到我的远程服务器。我在这里遵循了其他答案,并提出了以下配置:Ruby on rails Capistrano本地git存储库克隆到远程请求密码,而不考虑SSH密钥,ruby-on-rails,git,capistrano,Ruby On Rails,Git,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_ve
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是正确的,因为路径是远程服务器的本地路径,但我在尝试使用本地路径时出错,Capistrano一直在我的本地计算机上搜索,当它找不到这些路径时抛出错误
我要做的是将本地存储库添加到配置中,然后一切正常。所以我改变的是:
set :local_repository, '~/Dropbox/app_name/.git'
set :repository, '~/railsApps/app_name.git'
set :deploy_to, '~/railsApps/app_name'
local\u repository
路径是我的机器的本地路径,repository
和deploy\u to
路径是远程服务器的本地路径。首先:Capistrano总是在部署到的远程服务器上执行它的命令。
这意味着您在set:deploy\u 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
set:scm,“git”
设置:存储库“”
设置:分支“主”
集:git_浅_克隆,1
set:scm\u verbose,true
设置:部署到“/var/www/app”
set:deploy\u via,:remote\u缓存
这里的重要部分是:deploy_to
,它是服务器上的本地路径,而不是SSH路径这就是配置错误的地方
如果您查看capistrano然后运行的命令,这一点就变得更加重要。例如,它通常会执行诸如bash cd/var/www/app&&bundle instal…
之类的操作。
如果路径不是本地的,则命令很可能会失败
其次,这也意味着Capistrano将从远程服务器部署到Git服务器,因此您必须确保远程服务器可以访问Git服务器。
因此,ssh\u选项[:keys]
指定用于连接到远程\u服务器的本地ssh密钥,而在服务器上,将使用~/.ssh/id\u rsa.pub
中的默认密钥
通过使用SSH代理转发,您可以避免在服务器上设置SSH密钥,方法是包括SSH\u选项[:forward\u Agent]=true
。这将简单地将您的本地SSH代理套接字转发到服务器并使用它(很好,因为您的密钥永远不会离开您的机器)
有关SSH代理转发的更多信息,请参见以下内容:
检查远程服务器的.ssh文件夹,并确保您的ssh密钥(id_rsa.pub)已添加到授权密钥中,并且没有附加任何空间
从运行cap脚本的本地文件夹中添加ssh
检查远程服务器上的.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克隆它,我确实尝试了SSH转发,这没有什么区别。但请注意,它实际上似乎与现在的配置一样工作,只是我发现Gemfile.lock文件不存在时出错。您是否尝试在本地运行bundler以查看Gemfile.lock是否最新?是的,同样的问题。我愿意重写配置,以便在服务器上的repo文件夹中部署它,如果我能找到方法的话。你更喜欢哪一个?这不重要。尝试使用SSH登录到您的服务器并运行bundle安装,可能存在一些与您的dev机器不同的gem依赖项。。另外,如果Gemfile.lock确实存在,请查看服务器。。也许它走错了路?事实上,我认为从服务器上的repo部署是首选,因为它比上传压缩的tmp文件花费的时间要少得多。但是,如果我尝试为存储库使用本地路径,它会给我一个错误。如果我使用带有ssh://
的路径,那么它会询问密码。ssh密钥配对工作正常,我可以从CLI使用标准ssh登录而不会出现问题。很抱歉出现了-1,我正试图排除意外的+1,我应该在我的原始帖子中解释SSH密钥配对工作正常的事实。只需检查是否存在覆盖部署脚本凭据的config/deploy/staging.rb或production.rb或development.rb文件。