2011-01-26 3 views
5

Rails 3アプリのgit commitの前後に、しばしば一連のルーチンの 'クリーンアップ'タスクが実行されていることがわかりました。Gitや他のコマンドラインツールをThorスクリプトの中から呼び出すことはできますか?

私はこれらのものをThorスクリプトに入れようと考えていましたが、私が理解できなかったことは、Thor(またはRake)を使ってシステム上の他のツールを呼び出す方法です。

ThorやRakeスクリプトからgit logのようなコマンドを呼び出すことはできますか?その場合はどうなりますか?

ありがとうございます!

答えて

12

だけで殻から取り出す:

result = %x(git log) 
puts result 

または

system('git log') 

をあなただけの端末に出力を渡したい場合。

RubyのライブラリにGitのツールを抽象化grit宝石もあります:リンクの

require 'grit' 
repo = Grit::Repo.new("/path/to/repo") 
repo.commits.each do |commit| 
    puts "#{commit.id}: #{commit.message}" 
end 
+1

ああ!ありがとう。 "shell out"はおそらく私がGoogleのクエストで欠けていたキーワードです:) – Andrew

+0

うーん、%x、システムとバックティックを使用してnilを返します。私が紛失しているものはありますか?適切なディレクトリにcdする必要がありますか? – Jorge

+0

@Jorgeプロジェクトディレクトリ( '.git'ディレクトリのあるディレクトリ)内にあるか、' git'コマンドがパスに入っている必要があります(つまり、スクリプトが実際に 'git'を見つけられるようにする必要があります) 。 – Theo

4

これらはRubyファイルであることを忘れてはいけません。したがって、Rubyアーゼナルのすべてを使用することができます。%x [rm -rf /]、system( "rm -rf /")、 `rm -rf /`もこれらのスクリプトでアクセス可能です。

+0

ありがとう! – Andrew

関連する問題