2011-10-02 35 views
20

我正在爲capistrano,bundler和rvm的VPS部署Rails應用程序。 這裏是我的deploy.rb的一部分RVM Gemset - 生產中的Bundler&Capistrano

$:.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, '[email protected]_name' 

我.rvmrc

rvm --create use [email protected]_name 

當我登錄到我注意到,RVM寶石創建的服務器,但是所有的寶石都安裝在/共享/bundle/ruby/1.9.1/gems - 不在gemset中(/ usr/local/rvm/gemset)

我在開發中使用RVM,我認爲它很棒,但是何時該部署到生產環境。最佳做法是什麼?有沒有辦法告訴打包商在gemset中安裝寶石?

我甚至需要一個gemset嗎? (好像bundler已經在隔離gemsets),我錯過了什麼?

請幫我理解!

非常感謝你

回答

17

我在開發和生產中也使用RVM。然而,雖然我在開發中使用gemsets來分離我的rails項目之間的寶石,但我只使用RVM在我的生產VPS上安裝ruby,並讓Bundler處理我的寶石版本。

使用捆綁器集成通過require "bundler/capistrano"自動設置捆綁器的一些東西。你可以在Bundlers Github page中看到這個代碼。基本設置都讓包執行這條命令:

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

正如你所看到的,--deployment--path給出標誌,它告訴捆紮機與在shared/bundle目錄應用程序中捆綁你的寶石,並且只使用Gemfile.lock中指定的版本(即在開發中工作的版本)。由於bundle目錄是在部署之間共享的,我發現它與每個應用程序使用RVM gemsets相比,更容易。

你可以在this tutorial中找到關於此設置的一些額外信息。如果你仍然想把寶石放在不同的寶石中,我建議你使用this tutorial from Darcy Laycock進一步閱讀。

+1

感謝您的信息!我讓捆綁商爲我的每一個項目處理寶石,到目前爲止效果很好。 – Jazmin

+0

+1開發中的RVM,生產中的捆綁器。我使用這種方法在一臺主機上運行多個ruby應用程序,現在還沒有問題。 – Soup