2011-11-22 25 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