捆绑包:权限被拒绝

6

我将服务器升级到了ruby 2.1.1,并使用Capistrano进行部署。但是每次部署时都会出现各种错误。每次更改部署代码后,错误也在变化。以下是我目前遇到的问题:

更新/新问题

重新安装rvm和ruby之后,我现在在部署中遇到了不同的问题。以下是我当前的deploy.rb文件。

require "bundler/capistrano"   
require "rvm/capistrano"

set :rvm_type, :system
set :rvm_ruby_string, "ruby-2.1.1"

require 'bundler/capistrano'

# Capistrano
set :default_environment, {
    'PATH' => '/root/.rvm/gems/ruby-2.1.1/bin:/root/.rvm/gems/ruby-2.1.1@global/bin:/usr/local/rvm/rubies/ruby-2.1.1/bin:/usr/local/rvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games',
    'GEM_HOME' => "/root/.rvm/gems/ruby-2.1.1",
    'GEM_PATH' => "/root/.rvm/gems/ruby-2.1.1:/root/.rvm/gems/ruby-2.1.1@global",
    "MY_RUBY_HOME" => "/usr/local/rvm/rubies/ruby-2.1.1",
    "BUNDLE_PATH" => "/usr/local/rvm/rubies/ruby-2.1.1/bin/bundle"

}

set :rails_env, "production"
set :branch,    "master"

set :app_server, "ip"
set :db_server,  "ip"
server app_server, :app, :web
role :db, db_server, :primary => true

set :keep_releases, 1

set :deploy_to, "/var/www"
set :user, :jason
set :password, "cool password here"

set :repository, "git url"  # Your clone URL
set :scm, "git"
set :scm_username, "jason"
set :scm_passphrase, "password"

set :use_sudo, false

default_run_options[:pty] = true

set :ssh_options, {:forward_agent => true}

after 'deploy:restart', 'deploy:cleanup'
after 'deploy:update', 'deploy:create_symlink'

运行部署时,我遇到了这个错误:
Error: RVM was unable to use 'default'

我猜这是指rvm_ruby_string,我没有设置它。除此之外,我不知道为什么会出现这个错误。也许RVM无法在服务器上识别ruby?

旧问题

我将服务器更新到ruby 2.1.1。通过SSH进入服务器后,我运行gem env并获取相关的默认环境特征。

set :default_environment, {
    'PATH' => '/root/.rvm/gems/ruby-2.1.1/bin:/root/.rvm/gems/ruby-2.1.1@global/bin:/usr/local/rvm/rubies/ruby-2.1.1/bin:/usr/local/rvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games',
    'GEM_HOME' => "/root/.rvm/gems/ruby-2.1.1",
    'RUBY_VERSION' => 'ruby 2.1.1',
    'GEM_PATH' => "/root/.rvm/gems/ruby-2.1.1:/root/.rvm/gems/ruby-2.1.1@global"
}

然而,当我运行 cap deploy 命令时,出现了以下情况:
  * executing "cd /var/www/releases/20140517014048 && bundle install --gemfile /var/www/releases/20140517014048/Gemfile --path /var/www/shared/bundle --deployment --quiet --without development test"
    servers: ["ip address"]
    ["ip address"] executing command
 ** [out :: ipaddress] sh: 1: bundle: Permission denied

我认为这是我的默认环境。因为这是我在deploy.rb文件中改变的唯一内容。


“which bundle” 在终端中没有输出任何内容。 - thank_you
所以它说 /usr/bin/which: no bundle in (...?将您的路径设置为上面的路径,然后再次运行 which。 - Chloe
不,它什么也没返回。真的是什么都没有。就好像这个命令本来就不打算输出任何东西一样。 - thank_you
2
奇怪。我收到了 ls: cannot access /root/.rvm/gems/ruby-2.1.1@global/bin: No such file or directory 的错误信息。 - thank_you
1
尝试卸载bundle、rvm、ruby等,并重新安装。基本上,您需要确保一切都可以从命令行正常运行,然后再使用Capistrano。 - Chloe
显示剩余4条评论
2个回答

5
  1. 你需要使用default_env来定义SHELL变量。
  2. Permission Denied 表示你的SSH用户没有使用SSH、RVM或Bundler的权限。

Capistrano

第一步是确保default_environment正常工作。虽然我找不到直接参考文献(在这个页面上搜索default_env ),但我读到default_environment已被default_env取代。

如果你正在使用capistrano 3.0+,应该像这样使用default_env

set :default_env, {
    'PATH' => '/root/.rvm/gems/ruby-2.1.1/bin:/root/.rvm/gems/ruby-2.1.1@global/bin:/usr/local/rvm/rubies/ruby-2.1.1/bin:/usr/local/rvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games',
    'GEM_HOME' => "/root/.rvm/gems/ruby-2.1.1",
    'RUBY_VERSION' => 'ruby 2.1.1',
    'GEM_PATH' => "/root/.rvm/gems/ruby-2.1.1:/root/.rvm/gems/ruby-2.1.1@global"
}

权限

其次,您的ssh用户没有访问Ruby/bundler安装的正确权限。

正如您在评论中所讨论的,这可能是由于您的系统未安装rubyrvm,或者没有访问它的权限所致。

@chloe提出了一个很好的建议-为了使用它,我会使用root用户登录(进行测试),以确保您可以正确访问bundlerrvm数据。


我正在使用v2,所以default_env不是问题。我重新安装了rvm、ruby和bundler。错误消失了,但是当我运行deploy时,现在出现了一个新的错误。/usr/local/rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/rubygems/dependency.rb:298:in to_specs': Could not find 'bundler' (>= 0) among 8 total gem(s) (Gem::LoadError)。非常感谢你们迄今为止的帮助。 - thank_you
请先尝试使用gem install bundle单独安装bundler。 - Sumit Bisht

1

卸载Bundler、RVM、Ruby,然后重新安装它们。 对我有效。


我已经做过了,你认为这次还会有效果的逻辑是什么? - thank_you

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接