2012-08-16 4 views
50

RubyMineはあなたが行ったすべての変更を自動保存しますので、キーストロークが発生するたびにGuardがテストを実行します!そして、最もばかげたことは、明らかに、この自動保存機能を無効にする方法がないということです。私はRubyMineがRails開発者の間で非常に人気のあるエディターであるように思え、Guardはテストを自動化するために不可欠なツールであるようだ。 GuardはRubyMineで合理的に使用することは不可能であるため、RubyMineでのテストの自動化にはどのように対処していますか?RubyMineでGuardを使用することはできませんか?

+0

です。 – CrazyCoder

+1

どのように "不可解"ですか? –

+0

私は個人的にはオートセーブを全くしません。時には、特にvimのストロークでは、間違って別の文字に切り替える際に、現在のファイルのどこかに余分な文字を追加することがあります。通常、テストではこれをキャッチしますが、.jsファイルでは一度だけ追加されました。最後に「z」が追加されていました。 – Ted

答えて

144

私はRubyMine with하루中を使用しています。実際、Guardの一部はRubyMine自体で開発されています。

メニューのRubyMine > Preferencesに移動し、検索ボックスにsyncと入力し、リストからSystem Settingsを選択して、自動安全動作を設定できます。

Configure RubyMine auto safe behavior

絵は私の設定し、これらの作品は罰金を示しています。 Save files on frame deactivationを無効にして、手動保存でファイルを保存することもできます。

私は端末からガードを使用することを好むが、あなたはメニューからRun > Edit configurationsを選択することにより、実行構成を追加することにより、直接ガードを実行するためにルビーマインを設定することができます。

今、あなたはをクリックして、新しい設定を追加することができますプラス記号+IRB consoleを選択:

Add new run configuration

今IRBスクリプトとセットに守るためにパスを入力し、コンフィギュレーションGuardに名前を付けますプロジェクトの作業ディレクトリ。あなたは

は、私は、ターミナルを開いて守るために自分の道を見つけ、プロジェクトの作業ディレクトリに変更し、which guardを入力し、その

Configure the run configurationなど

、異なるガードのグループのように、IRBの引数としてあなたガードの引数を入力することもできますRVMによって管理されているRuby 1.9.3-p194 SDKのための結果は /Users/michi/.rvm/gems/ruby-1.9.3-p194/bin/guardです。

次に、を確認する必要があります。タブのバンドルのコンテキストでスクリプトを実行します。

Run with bundle exec

OKを押すと、あなたはブランドの新しい実行構成を持っています。ガードを開始する前に、あなたはあなたのGuardfile

interactor :simple 

を追加することで、単純なにインタラクタを設定する必要があります。今、あなたはガード直接ルビーマイン内(あるいはデバッグ)を実行することができます

Guard in Action

お楽しみください!

+10

それはすごく詳細な答えです:) – grosser

+0

すごい、ありがとう!なんらかの理由でRubyMineにファイルを保存しても、ガードがテストを再実行するようなことはありません。どんな考え? – alecmce

+1

@alecmce Rubyのインストールに[Readlineのサポートを追加する](https://github.com/guard/guard/wiki/Add-proper-Readline-support-to-Ruby-on-MacOS-X) 。 – Netzpirat

1

それとも、次のコードで、プロジェクトのルートにrun_guard.rbファイルを追加することができます

exec 'guard' 

気をつけろ!RubymineはPATHに問題があります。たとえば、/ usr/local/binはフィルタリングされます...

4

RubyMineでテストを実行すると、ガード仕様用に別のデータベース環境を設定すると非常に便利です。そうしないと奇妙な問題が発生します一つのプロセスまたは他のフリーズや一貫性のない結果が得られます。

名前あなたのガード仕様環境「CI」とdatabase.ymlの中に追加のエントリを作成します。私は、継続的な自動化のための「CI」を使用。

その後でこれを置きますあなたのGuardfile。重要なのは、

'RAILS_ENV' => 'ci' 
です。私はその後、私もそれは私の新しいとして、ガードをキックオフしてもルビーマインは60秒ごとに自動的にファイルを保存した気にしない

bundle exec guard -g spec 

を実行

group :spec do 
    guard :spork, :rspec_port => 1234, :cucumber_env => { 'RAILS_ENV' => 'ci' }, :rspec_env => { 'RAILS_ENV' => 'ci' } do 
    watch('config/application.rb') 
    watch('config/environment.rb') 
    watch(%r{^config/environments/.+.rb$}) 
    watch(%r{^config/initializers/.+.rb$}) 
    watch('spec/spec_helper.rb') 
    watch(%r{app/models/.+\.rb}) 
    watch(%r{app/views/.+\.haml}) 
    watch('Gemfile') 
    watch('Gemfile.lock') 
    watch('test/test_helper.rb') 
    end 

    # environment is 'ci' 
    guard :rspec, :cli => '--drb --drb-port 1234', :version => 2, :all_after_pass => false, :notification => true, :environment => 'ci' do 
    watch(%r{^spec/.+_spec.rb$}) 
    watch(%r{^lib/(.+).rb$})  { |m| "spec/lib/#{m[1]}_spec.rb" } 
    watch('spec/spec_helper.rb') { "spec" } 
    # Rails example 
    watch(%r{^spec/.+_spec.rb$}) 
    watch(%r{^app/(.+).rb$})       { |m| "spec/#{m[1]}_spec.rb" } 
    watch(%r{^lib/(.+).rb$})       { |m| "spec/lib/#{m[1]}_spec.rb" } 
    watch(%r{^app/controllers/(.+)_(controller).rb$}) do |m| 
     ["spec/routing/#{m[1]}_routing_spec.rb", 
     "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", 
     "spec/acceptance/#{m[1]}_spec.rb", 
     "spec/requests/#{m[1]}_spec.rb"] 
    end 

    watch(%r{^spec/support/(.+).rb$})     { "spec" } 
    watch('config/routes.rb')       { "spec/routing" } 
    watch('app/controllers/application_controller.rb') { "spec/controllers" } 
    # Capybara request specs 
    watch(%r{^app/views/(.+)/.*.(erb|haml)$})   { |m| "spec/requests/#{m[1]}_spec.rb" } 
    end 
end 

は、ここで私は私のものに設定している方法ですMBP Retinaは、Guardの実行中に著しく減速しません。

私がRubyMineでテストを自分で実行しようとするよりもはるかに速く失敗したテストを見つけるので、Guardの実行中のスペックは本当に素晴らしいです。つまり、テストは基本的に私の指がcmd-sから解放して保存するまでに完了しています。

私はこれを端末から実行します。私はRubyMineで動こうとしなかった。誰でもそのことの利点についてコメントしたいと思いますか?私はクリックダンプをクリックするといいと思う。

+0

私は 'locate \ */bin/guard'を使用するのが好きです。なぜなら、バイナリガードファイルのすべてのインストールをシステムに表示する簡単な方法だからです。 –

+0

なぜか分かりませんが、これはI/Oと私のためにsqliteロック例外。 –

2

これは本当に不満足な問題です。RubyMineをガードマンやグラント、他のタスクランナーと一緒に使用することは非常に難しくなります。

私は狂気の回避策のビットを作成し、それは私のために十分に働いています:

  1. ファイルの修正タイムスタンプを更新由緒あるUnixの「タッチ」コマンドを実行するために外部ツールを追加し、ファイルシステム・イベントを生成します。これは次のようになります。 External Tool called touch
  2. 外部ツールにキーボードショートカットを割り当てます。
  3. キーボードショートカットを[ドキュメントの保存]コマンドに割り当てます。
  4. ドキュメントを保存し、「タッチ」外部ツールを実行するマクロを記録します。ドキュメントの保存はアプリケーションのメニューに表示されないので、割り当てたキーボードショートカットを使用する必要があります。
  5. 新しいマクロのキーボードショートカットとしてCmd-Sを割り当てます。 http://youtrack.jetbrains.com/issue/RUBY-9903:これについて

私の完全なブログの記事は、このために開いて問題がありhttp://singlebrook.com/blog/saving-files-in-rubymine

関連する問題