RubyMine で Rails+RSpec を使う時のヒント (teamcity/formatter関連のエラー解決)


私の環境固有かもしれないのですが、RubyMine で RSpec を使おうとすると、こんなエラーが出ることがあります。

..../gems/activesupport-4.1.0/lib/active_support/dependencies.rb:247:in `require': cannot load such file -- teamcity/spec/runner/formatter/teamcity/formatter (LoadError)

これは、一部の Gem が、RubyMine のアプリケーションパッケージファイル(RubyMine.appの中)にあって、それを見付けられていないせいです。

実行時に Gem の検索パス ( $: ) がそこを通っていれば良いのですが、rspec 実行する時に -Iオプションで与えるようにするなどしても、どうも、うまくいきません。

しかたないので、以下の方法で対処しています。

環境変数の設定

環境変数 MY_RUBYMINE_HOME が RubyMineの app パッケージファイルを指すように設定します。OS X の環境で設定してもよいし、それが嫌ならRubyMineの中で、ツールの実行環境毎に設定できるので、それを用います。

メニューの Run → Edit Configuration から、設定を呼び出します。

RSpecのデフォルト設定、あるいは、既に作られているRSpecの実行環境を選び、
環境変数の追加設定ができるので、MY_RUBYMINE_HOME/Applications/RubyMine.app と設定します。

以前はRUBYMINE_HOMEという環境変数がセットされていたはずで、これを用いれば良かったと思うのですが、6.x では、どうもそうではなさそうなので、こうします。

rspec binstub の変更

Rails のプロジェクトルートディレクトリの bin ディレクトリの下、bin/rspec の頭に、以下のように追加します

#!/usr/bin/env ruby

if ENV["MY_RUBYMINE_HOME"]
  $:.unshift(File.expand_path("rb/testing/patch/common", ENV["MY_RUBYMINE_HOME"]))
  $:.unshift(File.expand_path("rb/testing/patch/bdd", ENV["MY_RUBYMINE_HOME"]))
end

これで、Rubymineの中からエラー起こさずに実行できるはずです。