是否可以从ruby系统调用运行bundle install?
我正在尝试安装gems并为另一条路径下的项目运行测试...
例如命令是:
"cd /some/other/project && bundle install && gem list && rspec spec"
理想情况下,我想在一个项目中通过rake文件运行测试,同时确保安装该项目的相关gem。
如果我运行,CD似乎正常工作:
"cd /some/other/project && pwd"
确实提供了正确的路径。但是,如果我捆绑安装&&宝石环境,它似乎安装当前文件夹的宝石,不使用其他项目的Gemfile,随后rspec规范不起作用。
总结一下,运行'rspec spec'的最佳方法是什么,对于rakefile中的另一个项目,还确保相关的gem可用?
答案 0 :(得分:6)
实际上看起来实现这种行为的官方方式是这样的:
Bundler.with_clean_env do
system "shell out"
end
我在google网上找到了答案:https://groups.google.com/d/msg/ruby-bundler/UufhzrliWfo/d51B_zARksUJ
答案 1 :(得分: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
原帖: 我正用这个撕掉我的头发。我认为在启动应用程序时它与bundle exec | install | update设置环境变量有关,我试过了
bash -c "cd ../other/; bundle install; and it fails"
我试过用
open3.popen(“bundle install”,:chdir =>“../ other”)
如果有任何安慰你并不疯狂,但我似乎无法弄清楚如何解决它。
我也试过了 open3.popen(“bundle install”,{:chdir =>“../ other”,:unsetenv_others => false}) 但最终会从系统路径中删除RVM;
答案 2 :(得分:0)
除了kangguru的回答,你可能需要做
bundle install --deployment
所以Bundler.with_clean_env不会被rvm弄乱。 这会将所有宝石的副本安装到项目根目录中的.vendor / bundle中,然后由Bundler.with_clean_env命令选中。
(会把这个作为评论,但我没有50多个声誉)