2011-11-22 7 views
5

ruby​​システムコールからバンドルインストールを実行することはできますか?CLI/Rubyシステムコールによるバンドルインストール

私は宝石をインストールし、別のパスの下のプロジェクトのためのテストを実行しようとしている

...

例えばコマンドは次のとおりです。

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

私はちょうど経由でテストを実行したいですそのプロジェクトの関連する宝石がインストールされていることを確認しながら、1つのプロジェクトにレーキファイルを作成します。それは正しいパスを与えない

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

CDは、私が実行した場合、正常に動作しているようです。しかし、& & gem環境をバンドルしてインストールすると、現在のフォルダのGemファイルをインストールしているように見えますが、他のプロジェクトのGemfileは使用されていないため、rspecの仕様は機能しません。

要約すると、rakefile内の別のプロジェクトで 'rspec spec'を実行して、関連する宝石が利用可能であることを保証するにはどうすればよいでしょうか?

答えて

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 

オリジナルポスト: 私はこれで私の髪を引き裂くしています。インストール| |私はそれがバンドル幹部とは何かを持っていると思うの更新は、アプリケーションの起動時の環境変数を設定し、私は私が使用して試してみました

bash -c "cd ../other/; bundle install; and it fails" を試してみました open3.popen(「バンドルのインストール」:CHDIR = > "../ other")

あなたが夢中になっていない場合は、あなたは夢中ですが、私はそれを修正する方法を見つけることができないようです。

Iも open3.popenを試みた( "バンドルのインストール"、{:CHDIR => "../他の":unsetenv_others =>偽}) が、これはシステムパスからRVMを除去アップしてしまいます。

0

kangguruの答えに加えて、あなたがする必要があるかもしれません:私はGoogleグループで答えを超える見つけ

Bundler.with_clean_env do 
    system "shell out" 
end  

do

bundle install --deployment 

したがって、Bundler.with_clean_envはrvmによって混乱することはありません。 これは、プロジェクトのルートにある.vendor/bundleにすべてのgemのコピーをインストールし、Bundler.with_clean_envコマンドでピックアップします。

ちょうど私が@easyjoで動作するように使用実現、(コメントとしてこれを入れているだろうが、私は50+の評判を持っていない)

+0

ヘクタール。それは小さなstackoverflowの世界です – xavriley

関連する問題