2016-05-17 3 views
0

すべてのルビーバージョンで 'rake spec'を実行する方法を探していました。1つのコマンドで複数のRubyバージョンのRSpecを実行する

は、これまでのところ私はRakefileにこのコードを書いたが、それは動作しません:

RUBIES = ['ruby-2.0.0', 'ruby-2.1.1', 'ruby-2.2.1'] 

RUBIES.each do |ruby_v| 
    sh "rvm use #{ruby_v}" 
    RSpec::Core::RakeTask.new(:spec) 
end 

任意のアイデア私はこれを実現できますか?

私が単一のルビーバージョンのテストを実行するのか、それともすべてのテストを実行するのかを指定する引数を渡すことができたらうれしいです。

EDIT:

Here's私が使用して私が取得していますエラーRakefile。私が上で述べたのと同じファイルではありません。答えではKeithが提案したように​​を使用しています。

+0

あなたがすることはできません。私は私のシェルとしてzshを使用していますが、あなたは以下のコードでbashを代用することができるはずですし、それが仕事(もちろんそこにあなたのRSpecのコマンドを入れる)必要があります

Ruby内からRubyのバージョンを切り替えます。 – Stefan

+0

Hmm。だから、いくつかの異なるルビーのスペックを実行するレーキタスクを書く方法はありますか? – Lokesh

+1

RVMには[ラッパー](https://rvm.io/deployment/cron#direct)が付属しています。ドキュメントによれば、 '/ usr/local/rvm/wrappers/ruby​​-2.1.1 @ projectX/rake'を実行すると(パスを調整する必要があります) – Stefan

答えて

2

rvmはシェルコマンドであり、Rubyの設定はシェルの現在のインスタンスにのみ適用されます。したがって、sh "rvm use #{ruby_v}"を実行すると、起動したシェルのrvmバージョンが変更され、そのシェルから終了します。

さらにRubyプログラムはRuby仮想マシンを実行するオペレーティングシステムプロセスなので、RSpec::Core::RakeTask.new(:spec)に電話をかけても、スクリプトを開始したOSプロセスとRubyバージョンは同じです。

あなたが起動したシェルでrspecテストを実行し、Rubyのバージョンを変更する必要があります。このようなものがうまくいくと思いました:

`rvm use #{ruby_v}; rspec spec` 

...しかし、あなたが指摘したとおりです。 rvmが正しく設定されるように、新しいシェルを「ログインシェル」として実行する必要があります。さらに、新しいシェルには、呼び出すものがシェルコマンドであり、スクリプトまたはバイナリ実行可能ファイルではないことを伝える必要があります。言い換えれば、

1)コマンドを明示的にbashまたはzshshが私のMacではうまくいきませんでした)と明示的に呼び出してください。

2)ログインシェルであることを指定します(おそらく-l)。

3)スクリプトコマンドまたは実行可能ファイルではなく、シェルコマンド(rvm)を実行していることを指定します(おそらく-c)。

2.3.0 :024 > puts `zsh -lc "rvm current"` 
ruby-2.3.0 
=> nil 
2.3.0 :025 > puts `zsh -lc "rvm use jruby; rvm current"` 
Using /Users/kbennett/.rvm/gems/jruby-9.0.5.0 
jruby-9.0.5.0 
=> nil 
2.3.0 :026 > puts `zsh -lc "rvm current"` 
ruby-2.3.0 
=> nil 
+0

私は試しました。私はまだエラーが表示されます: 'RVMは関数ではなく、 'rvm use ...'でルビを選択すると機能しません。'あなたの提案を使用して、ルビのバージョンは変更されていません。 – Lokesh

+1

@Lokesh * "still"?*エラーは何も言及していません。それに応じて質問を更新してください。 – Stefan

+0

私は答えを更新しました。ありがとう@Stefan – Lokesh

関連する問題