【问题标题】:bundle: Permission denied捆绑:权限被拒绝
【发布时间】:2014-05-17 01:46:06
【问题描述】:

我将我的服务器更新为 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 的服务器,获取相关的 default environment 特征。

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 文件中更改的唯一内容。 `

【问题讨论】:

  • SSH 进入机器,使用which bundle 查找捆绑可执行文件,使用ls -l /path/to/bundle 检查文件权限和所有者。在上面设置的PATH 中查找另一个bundle 可执行文件,每个路径都有find /path/one/ -name bundle。尝试从 shell 运行 bundle 命令。查看第一行以查看#!/path/to/ruby,并使用ls -l 检查其权限。
  • which bundle 在终端中不打印任何内容。
  • 所以它说/usr/bin/which: no bundle in (...?将您的路径设置为上面的路径,然后再次运行。
  • 奇数。我收到了ls: cannot access /root/.rvm/gems/ruby-2.1.1@global/bin: No such file or directory
  • 尝试卸载bundle、rvm、ruby等,重新安装。基本上,在使用 Capistrano 之前,您首先要确保一切都从命令行运行。

标签: ruby-on-rails ruby capistrano bundler


【解决方案1】:
  1. 您需要使用 default_env 来定义 SHELL 变量
  2. Permission Denied 表示您的 SSH 用户无权使用 SSH、RVM 或 Bundler

Capistrano

第一步是确保default_environment 正常工作。虽然我找不到direct reference (search for default_env on this page),但我读到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 的安装

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

@chloe 有一个惊人的建议 - 为了解决这个问题,我将使用 root 用户(进行测试)登录,以确保您实际上可以正确访问 bundlerrvm 数据

【讨论】:

  • 我使用的是 v2,所以 default_env 不是问题。我重新安装了 rvm、ruby 和 bundler。错误消失了,但我现在在运行部署时弹出一个新错误。 /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) 到目前为止感谢您的帮助。
  • 尝试先使用 gem install bundle 单独安装 bundler
【解决方案2】:

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

【讨论】:

  • 我已经这样做了。您认为这一次会再次起作用的逻辑是什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-11
  • 2011-07-22
  • 2021-12-27
  • 2015-08-30
相关资源
最近更新 更多