ruby-on-rails-3 - capistrano 不会将安装捆绑到指定的 gemset 中

标签 ruby-on-rails-3 rvm capistrano

我有一个 Rails 应用程序配置为通过 Capistrano 和 RVM 部署。当我运行 cap my_stage deploy(这适用于我的所有阶段)时,Capistrano bundle installs/var/www/my_app/shared/bundle,即使我在我的 config/deploy.rb 文件中指定了我希望它使用 1.9.2@my_app gemset。

这与我的预期相反 - 我希望 Capistrano 部署到我用户的主目录:~/.rvm/gems/ruby-1.9.2-p290@my_gemset/gems

我做错了什么吗?或者这是预期的行为。

这是我的部署文件:

require 'capistrano/ext/multistage'
require 'bundler/capistrano'

set :stages, %w(local development staging production)
set :default_stage, "local"

set :application, "My Rails App"
set :repository,  "git@github.com:MyApp/my_app.git"

set :scm, :git
set :deploy_to, "/var/www/my_app"
set :use_sudo, false
ssh_options[:keys] = [File.join(ENV["HOME"], ".ssh", "my_key.pem")]

# RVM
$:.unshift(File.expand_path('./lib', ENV['rvm_path'])) 
require 'rvm/capistrano'                               
set :rvm_ruby_string, '1.9.2@my_app'
set :rvm_type, :user
set :user, 'my_user'

这是我的 Rails 应用程序中的 .rvmrc 文件:

rvm_trust_rvmrc_flags=1
rvm use 1.9.2@my_app

谢谢, 最大

最佳答案

虽然我不使用 Capistrano(我部署到 Heroku,所以我只需要 git),我想它可能使用当前推荐的最佳实践,即在生产服务器上调用“bundle install --deployment”根据 Bundler 文档,它会将所有 gem 本地安装到您应用程序的部署根目录中,而不是您的 GEM_HOME(在这种情况下将是您的 RVM gemset)。当您使用“bundle install --deployment”时,您必须使用“bundle exec rake”(如果您还安装了 --binstubs,则使用 bin/rake)在您的捆绑环境中运行 Rake。

Bundler 建议以这种方式部署的主要原因是为了避免在部署的应用程序中出现任何“依赖 hell ”情况。虽然 RVM gemset 做同样的事情,但 Bundler 不假设 RVM 存在或不存在,它只假设 Ruby 和 RubyGems 已安装并正常工作。

使用 Bundler 时,无论 --deployment 标志如何,始终建议使用“bundle exec”或 binstubs(即使在处于开发或测试模式的本地计算机上),这样您就可以 100% 确定自己仅依赖于 Gemfile 所需的 gem(当然还有它们的依赖项),并且您不会意外部署依赖于计算机上本地安装的任何未部署到生产服务器的 gem 的应用程序。

关于ruby-on-rails-3 - capistrano 不会将安装捆绑到指定的 gemset 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8190966/

相关文章:

ruby-on-rails - 更新生产数据库的最佳实践?

ruby-on-rails - Ruby on Rails 执行显示而不是索引

rvm 运行并禁用 vim

ruby-on-rails - 旧 Rails 应用程序出现奇怪的 Rails 错误 "permission denied: bin/rails"

ruby - ZSH 提示 RVM __rvm_cleanse_variables : function definition file not found

ruby-on-rails - Capistrano 发布未发布

ruby-on-rails-3 - 未找到 Rails 测试 - 未定义的局部变量或方法 "response"

ruby-on-rails - rspec put 请求在我的 stub 上的正确参数是什么

ruby-on-rails - 如何设置mongoid的时区

ruby - Capistrano 部署错误 : Stage not set