如何通过CLI / Ruby系统调用捆绑安装?

问题描述 投票:5回答:3

是否可以从ruby系统调用运行bundle install?

我正在尝试安装gems并为另一条路径下的项目运行测试...

例如,命令是:

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

理想情况下,我想在一个项目中通过rake文件运行测试,同时确保安装该项目的相关gem。

如果我运行,CD似乎正常工作:

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

它确实提供了正确的路径。但是,如果我捆绑安装&& gem环境,它似乎安装当前文件夹的gem,并且不使用其他项目的Gemfile,随后rspec规范不起作用。

总结一下,运行'rspec spec'的最佳方法是什么,对于rakefile中的另一个项目,还确保相关的gem可用?

ruby bundler gemfile
3个回答
6
投票

实际上看起来实现这种行为的官方方式是这样的:

Bundler.with_clean_env do
  system "shell out"
end    

我在google网上找到了答案:https://groups.google.com/d/msg/ruby-bundler/UufhzrliWfo/d51B_zARksUJ


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;


0
投票

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

bundle install --deployment

所以Bundler.with_clean_env不会被rvm弄乱。这会将所有gem的副本安装到项目根目录中的.vendor / bundle中,然后由Bundler.with_clean_env命令选中。

(会把这个作为评论,但我没有50多个声誉)

© www.soinside.com 2019 - 2024. All rights reserved.