2010-11-15 140 views
0

我已經編寫了一個rake任務來通過系統運行一些其他rake任務(以便將ActiveRecord綁定到不同的數據庫,其他事情)。它在我的OS X機器上工作正常,但在我們的生產Linux機器上出現加載錯誤時失敗。任務平凡歸結爲:通過系統執行其他rake任務的rake任務失敗 - 沒有這樣的文件要加載rake

namespace :jobs do 

    task :foo => :environment do 
    system "rake jobs:bar" 
    end 

    task :bar => :environment do 
    puts "foobar" 
    end 

和追蹤輸出爲:

-bash-3.2$ rake jobs:foo --trace 
(in /the/path) 
** Invoke jobs:foo (first_time) 
** Invoke environment (first_time) 
** Execute environment 
** Erubis 2.6.6 
** Execute jobs:foo 
/usr/bin/rake:19:in `load': no such file to load -- rake (LoadError) 
    from /usr/bin/rake:19 

我甩了一個看跌期權$:到/ usr/bin中/耙子,已經發現一些有趣的事情。主作業具有同時含有這些路徑的負載路徑:

/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/bin 
/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib 

而二次作業具有僅含負載路徑:

/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib 

這或許可以解釋負載誤差,但不適合的原因它。有任何想法嗎?

回答

0

檢查以確保您的安裝已正確設置所需的環境變量。 http://docs.rubygems.org/read/chapter/3 使用「導出RUBYOPT = RUBYGEM」而不是「導出RUBYOPT = RUBYGEMS」時出現同樣的問題。啊,一個角色可以做出的差異。

+0

感謝您的建議,但不幸的是,似乎並不是這樣。 rake可執行文件本身執行require'rubygems'位,並且loadpath證實rubygems正在完成它的工作,在兩個上下文中略有不同。我很確定你是對的,但是我不能在我的生活中找出哪些是問題。 – 2010-11-15 18:51:53

0

如果您真的試圖從另一個rake任務調用rake任務。爲什麼不這樣做? 「回扣::任務。[ '工作:酒吧']調用」。你甚至可以在一個循環中完成它,例如每個改變ENV變量的數組#等等。我之前在任務中完成了這個任務。

但是,如果你的例子被設計出來了,並且你沒有真正調用一個任務,而只是問爲什麼子shell有不同的PATH設置,我不知道。也許如果這很難,那就暗示它應該以另一種方式來完成。

+0

因爲我需要將ActiveRecord :: Base綁定到另一個數據庫,當然,您自己告訴我不要使用establish_connection來明確地執行它,而只是更改ENV變量不會改變這一點,也不會重做其他任何ENV var特定的初始化。 – 2010-11-21 04:27:31