2011-08-06 128 views
1

努力讓RVM與Capistrano和Rails 3.1rc5協同工作,並且被我發現的指令搞糊塗了。RVM對Capistrano的說明感到困惑

RVM的網站提供these instructions是說:

在新的選項,你可以做以下(調整到您的個人設置):

$:.unshift(File.expand_path('./lib', ENV['rvm_path'])) # Add RVM's lib directory to the load path. 
require "rvm/capistrano"    # Load RVM's capistrano plugin. 
set :rvm_ruby_string, '[email protected]'  # Or whatever env you want it to run in. 

現在我認爲他們要這個在我們的deploy.rb文件的頂部!?!我只問,因爲我沒見過「$:.」,儘管很少,我看過deploy.rb

以「$:.」開頭的行是什麼?它是否屬於deploy.rb或其他地方?

+0

似乎在使用他們創建的rvm-capistrano創業板之後,它會建議您刪除該行:'將RVM - Capistrano集成提取到單獨的創業板,安裝:'gem install rvm-capistrano'並移除'$ LOAD_PATH.unshift'行 – lulalala

回答

3

$:是一個特殊的Ruby的變量,相當於$LOAD_PATH,這是無論你使用一個require聲明Ruby的搜索路徑。調用.unshift(...)就可以將所提供的路徑添加到負載路徑的正面

如果您只是在沒有$:.unshift語句的情況下調用require 'rvm/capistrano',則會出現錯誤,因爲默認情況下,RVM的Capistrano庫不在Ruby的加載路徑中。您在其他deploy.rb文件中沒有看到這一點的原因是,通常情況下,唯一需要的庫是Capistrano,它們已通過運行cap deploy(或任何其他cap命令)包含在內。

我的deploy.rb文件在它們中有完全相同的代碼,並且它工作得很好。

1

我認爲這需要在頂層,以便它在任何調用之前被設置 - 即,捆綁之前,任何耙子任務等。這對我來說是有問題的。在我的情況下,我的網絡和應用程序服務器是不一樣的,我不想在網絡服務器上使用rvm。

當真正的解決方案相當簡單時,它也似乎有點黑魔法。更新代碼後,在.rvmrc文件中設置一個有福的gemset,而不需要做任何事情。

after "deploy:update_code", "deploy:rvm:setup" 

namespace :deploy do 
    namespace :rvm do 
    # Set up .rvmrc 
    # Note, not using method described in: 
    # https://rvm.beginrescueend.com/integration/capistrano/ 
    # We want to use RVM only on the app server, so better to set up and bless an .rvmrc file 
    task :setup, :roles => :app do 
     run "cd #{latest_release}; rvm use [email protected]#{application} --rvmrc --create && rvm rvmrc trust" 
    end 
    end 
end