Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Capistrano本地git存储库克隆到远程请求密码,而不考虑SSH密钥_Ruby On Rails_Git_Capistrano - Fatal编程技术网

Ruby on rails Capistrano本地git存储库克隆到远程请求密码,而不考虑SSH密钥

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

对卡皮斯特拉诺来说是全新的

我有一个本地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是正确的,因为路径是远程服务器的本地路径,但我在尝试使用本地路径时出错,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文件。