2011-11-22 101 views
5

是否有可能捆綁運行從紅寶石系統調用安裝?捆綁通過CLI/Ruby的系統調用安裝

我試圖安裝寶石和運行測試下另一條路徑的一個項目...

例如命令是:

"cd /some/other/project && bundle install && gem list && rspec spec" 

理想我想只運行通過測試耙文件在一個項目中,同時確保該項目的相關gem已安裝。

的CD似乎是正常工作,如果我跑:

"cd /some/other/project && pwd" 

它並給出正確的路徑。但是,如果我不捆綁安裝& &寶石的環境中,它似乎安裝寶石對當前文件夾並不會從其他項目中使用的Gemfile,隨後RSpec的規範不起作用。

總之,什麼是運行「rspec的規範」例如最好的辦法,對於Rake文件還保證了相關的寶石都可以在另一個項目?

回答

0

編輯: 我想我有它弄清楚。看看這對你的作品:

#@pwd is the "working directory of the execution... 

Dir.chdir @pwd do 
    so = "" 
    vars = { 
     "BUNDLE_GEMFILE" => nil, 
     "BUNDLE_BIN_PATH" => nil, 
     "RUBYOPT" => nil, 
     "rvm_" => nil, 
     "RACK_ENV" => nil, 
     "RAILS_ENV" => nil, 
     "PWD" => @pwd 
     } 
    options = { 
      :chdir=>@pwd 
      } 
    Open3.popen3(vars, cmd, options) do |stdin, stdout, stderr| 
    stdin.close_write 
    so = stdout.read 
    so = stderr.read if so.nil? || so == "" 
    end 

    so 
end 

原貼: 我撕裂我的頭髮了這一點。我認爲這是與束EXEC |安裝|更新設置環境變量,當你啓動應用程序,我已經試過

bash -c "cd ../other/; bundle install; and it fails" 我已經嘗試使用 open3.popen(「包安裝」:CHDIR = >「../其他」)

,如果它是任何安慰你是不是瘋了,但我似乎不弄清楚如何解決它。

我還試圖 open3.popen( 「束安裝」,{:CHDIR => 「../其他」,:unsetenv_others =>假}) 但這結束了從系統路徑去除RVM;

0

除了kangguru的回答,您可能需要做

bundle install --deployment 

這樣,Bundler.with_clean_env不會被rvm弄亂。 這會將所有寶石的副本安裝到項目根目錄中的.vendor/bundle,然後由Bundler.with_clean_env命令拾取。

(本來把這個作爲一個評論,但我沒有50+的聲譽)

+0

公頃,才意識到我用@easyjo工作。這是一個小的stackoverflow世界 – xavriley