![](/img/trans.png)
[英]rake - How to execute a task with environment variables from inside another task?
[英]Execute tests for another app from a rake file
我正在嘗試為另一個項目中的rake文件中的項目執行黃瓜測試。
目前我正在嘗試這個:
system "cd /path/to/project;rvm use --create 1.9.2-p290@test; cucumber features/test.feature"
這適用於cd,如果我在rvm使用后運行哪個ruby,rvm似乎有效......但問題是黃瓜寶石好像是從當前文件夾調用的(不是app到test文件夾)。
我得到的錯誤是:
cucumber is not part of the bundle. Add it to Gemfile. (Gem::LoadError)
它似乎使用黃瓜的本地gemset版本而不是@test gemset。
有什么想法嗎?
或者,是否有更好的方法為另一個依賴rvm和不同捆綁的項目運行黃瓜測試?
我也一直試圖做同樣的事情; 從另一個“控制”應用程序內部運行應用程序的測試(或任何rake任務)。
原因:(就這樣,我沒有得到“為什么在地球上?”)
我正在嘗試構建一個應用程序(比如cruisecontrol.rb),它可以監視,安排和查看一組應用程序的規范。
在巡航控制源的一些挖掘后,我發現Bundler提供了一個解決方案;
Bundler.with_clean_env do
system "rake spec"
end
參見https://github.com/thoughtworks/cruisecontrol.rb/blob/master/lib/platform.rb的第 56行
跳出捆綁包,命令在沒有控制應用程序的寶石的情況下運行。
但最有可能的是,該命令使用bundle exec
然后停止工作。
Bundler.with_clean_env { system "bundle exec rake spec" }
你回到了完全相同的問題。 這是由一些仍然存在並由子shell繼承的bundle變量引起的。 滿(非常好)的解釋在這里 。
解決方案是在with_clean_env
上更改with_clean_env
方法,就像這樣;
BUNDLER_VARS = %w(BUNDLE_GEMFILE RUBYOPT BUNDLE_BIN_PATH)
module Bundler
def self.with_clean_env &blk
bundled_env = ENV.to_hash
BUNDLER_VARS.each{ |var| ENV.delete(var) }
yield
ensure
ENV.replace(bundled_env.to_hash)
end
end
以上代碼來自這里
我把它放在我的控制應用程序的environment.rb中(它可能應該在初始化程序中?)現在我可以在控制應用程序中運行另一個應用程序的規范。
#in control app
result = nil
Dir.chdir(test_app_path) #move into test app
Bundler.with_clean_env { result = `bundle exec rake spec` } #run test apps specs
puts result #display result inside control app
改變;
在您的腳本中, &&
似乎有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.