web-dev-qa-db-ja.com

RubyMineでGuardを使用することは不可能ですか?

不可解な理由により、RubyMineは変更をすべて自動保存するため、キーを押すたびにGuardがトリガーされ、テストが実行されます。そして、最もおかしなことは、この自動保存の「機能」を無効にする方法がないことです。 RubyMineはRails=開発者の間で非常に人気のあるエディターのようですが、Guardはテストの自動化に使用される不可欠なツールのようです。GuardはRubyMineで合理的に使用できないため、 RubyMineを使用してテストを自動化することはできますか?

52
yiinewbie

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

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

Configure RubyMine auto safe behavior

写真は私の設定を示しており、これらは正常に動作します。 Save files on frame deactivationを無効にして、手動保存でのみファイルを保存することもできます。

ターミナルからGuardを使用することを好みますが、メニューからRun > Edit configurationsを選択してRun configurationを追加することで、Guardを直接実行するようにRubyMineを構成できます。

これで、プラス記号+をクリックしてIRB consoleを選択し、新しい構成を追加できます。

Add new run configuration

次に、構成にGuardという名前を付け、GuardへのパスをIRBスクリプトに入力し、プロジェクトの作業ディレクトリを設定します。さまざまなGuardグループなどのように、Guard引数をIRB引数として入力することができます。

Configure the run configuration

ターミナルを開いてGuardへのパスを見つけ、プロジェクトの作業ディレクトリに変更してwhich guardと入力すると、Ruby 1.9.3-p194の場合は/Users/michi/.rvm/gems/Ruby-1.9.3-p194/bin/guardになります。 RVMによって管理されるSDK。

次に、Bundlerタブで、バンドルのコンテキストでスクリプトをRun the(= /// =)実行する必要があります

Run with bundle exec

ここでOKを押すと、新しい実行構成ができます。 Guardを起動する前に、インタラクターを次のように追加してシンプルに設定する必要があります。

interactor :simple

あなたのGuardfileに。これで、RubyMine内でGuardを直接実行(またはデバッグ)できます。

Guard in Action

楽しい!

148
Netzpirat

テスト用にRubyMineでガードを実行する場合、ガード仕様用に個別のデータベース環境を構成すると非常に役立ちます。そうしないと、奇妙な問題が発生します(1つのプロセスまたは他のプロセスがフリーズするか、一貫性のない結果になります)。

ガードスペック環境に「ci」という名前を付け、database.ymlに追加のエントリを作成します。連続自動化には「ci」を使用します。

次に、これをGuardfileに入れます。重要なことは

'Rails_ENV' => 'ci'

これが私のセットアップ方法です:

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

次に走る

bundle exec guard -g spec

新しいMBP RetinaがGuardの実行時に著しく遅くなることはないので、GuardMが起動しても、RubyMineがファイルを60秒ごとに自動的に保存するようにしても構いません。

ところで、Guardが仕様を実行していることは本当に素晴らしいです。なぜなら、RubyMineで自分でテストを実行するよりもはるかに速くテストが失敗するからです。つまり、テストは基本的に、指がcmd-sから解放されて保存されるまでに行われます。

これはターミナルから実行します。 RubyMineで実行したことはありません。誰かがそれを行うことの利点についてコメントしたいですか?スタックダンプをクリッカブルにするといいと思います。

4
justingordon

これは本当にイライラする問題であり、RubyMineをガードやうなり声や他のタスクランナーで使用することは非常に困難です。

私は少しクレイジーな回避策を作成しましたが、それは私にとっては十分に機能しています:

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

これに関する私の完全なブログ投稿は http://singlebrook.com/blog/saving-files-in-rubymine にあります。

3
sbleon

または、次のコードを使用して、プロジェクトのルートにrun_guard.rbファイルを追加できます。

exec 'guard'

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

1
jmgarnier