【发布时间】: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