【问题标题】:RVM Gemset - Bundler & Capistrano in ProductionRVM Gemset - 生产中的捆绑器和 Capistrano
【发布时间】:2011-10-02 19:47:00
【问题描述】:

我正在使用 capistrano、bundler 和 rvm 将 rails 应用程序部署到 VPS。 这是我的 deploy.rb 的一部分

$:.unshift(File.expand_path('./lib', ENV['rvm_path']))
require "rvm/capistrano"     
require "bundler/capistrano"             # Load RVM's capistrano plugin.

set :rvm_type, :system
set :rvm_ruby_string, '1.9.2@gemset_name'

我的 .rvmrc

rvm --create use 1.9.2@gemset_name

当我登录服务器时,我注意到 rvm gemset 已创建,但是所有 gem 都安装在 /shared/bundle/ruby/1.9.1/gems 中——而不是 gemset(/usr/local/rvm /gemset)

我在开发中使用 RVM,我认为它很棒,但是什么时候可以部署到生产环境。最佳做法是什么?有没有办法告诉 bundler 在 gemset 中安装 gem?

我什至需要一个宝石组吗? (似乎捆绑器已经在隔离宝石集),我错过了什么吗?

请帮我理解!

非常感谢

【问题讨论】:

    标签: rvm capistrano


    【解决方案1】:

    我也在开发和生产中使用 RVM。但是,虽然我在开发中使用 gemsets 来分离我的 rails 项目之间的 gems,但我只使用 RVM 在我的生产 VPS 上安装 rubies 并让 Bundler 处理我的 gems 的版本。

    通过require "bundler/capistrano" 使用捆绑器集成会自动为捆绑器设置一些东西。您可以在Bundlers Github page 中看到这背后的代码。基本设置是让bundle执行这个命令:

    bundle install --gemfile Gemfile --path shared/bundle --deployment --quiet --without development test
    

    如您所见,给出了--deployment--path 标志,这告诉Bundler 将您的gem 与您的应用程序捆绑在shared/bundle 目录中,并且只使用您的Gemfile.lock 中指定的版本(即正在开发中的版本)。由于 bundle 目录在部署之间共享,我发现它与为每个应用程序使用 RVM gemsets 相当,只是更容易。

    如果您仍想将宝石放在单独的宝石集中,我建议您使用this tutorial from Darcy Laycock 进一步阅读。

    【讨论】:

    • 感谢您的信息!我让 bundler 为我的每个项目处理 gem,到目前为止它运行良好。
    • +1 开发中的 RVM,生产中的捆绑器。我正在使用这种方法在一台主机上运行多个 ruby​​ 应用程序,还没有问题。
    猜你喜欢
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 2011-11-10
    • 2012-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多