Gemfile の グループ化, 明確にしないと予期せぬエラーが起きる (書き留め)
Gemfile のグループ化は明確にしよう、という話
お題のGemfile
source 'https://rubygems.org' gem 'rails', '~> 4.2' gem 'sqlite3' gem 'coffee-rails', '~> 4.0.0' gem 'haml' gem 'jbuilder', '~> 2.0' gem 'jquery-rails' gem 'faraday' gem 'rails_config' gem 'ransack' gem 'sass-rails' gem 'sdoc', '~> 0.4.0', group: :doc gem 'spring', group: :development gem 'therubyracer', platforms: :ruby gem 'uglifier', '>= 1.3.0' group :development, :test do gem 'erb2haml' gem 'faker' gem 'factory_girl_rails' gem 'json_spec' gem 'pry-byebug' gem 'pry-rails' gem 'rspec' gem 'rspec-given' gem 'rspec-rails' gem 'rspec-parameterized' gem 'nokogiri' end
本題
この Gemfile で rails s -e development
すると
rspec, rspec-rails, nokogiri など(Gem そのもの、関連するファイル群)
がコマンド実行時の、ファイル読込み対象になる
(confing/application.rb
の Bundler.require(*Rails.groups)
より)
従って、以下のようなことが起こり得る
- テスト環境でしか定義されない定数を spec/support/*.rb に定義していた
- rails s -e development を実行する
- spec/support/*.rb が読み込まれる
- テスト用定数への「undefined local variable or method」が発生し、サーバー落ちする
ので、各3種(プロダクション, 開発, テスト) のグループ化は明確にしよう
訂正 Gemfile はこっち(要精査)
source 'https://rubygems.org' gem 'rails', '~> 4.2' gem 'sqlite3' gem 'coffee-rails', '~> 4.0.0' gem 'haml' gem 'jbuilder', '~> 2.0' gem 'jquery-rails' gem 'faraday' gem 'rails_config' gem 'ransack' gem 'sass-rails' gem 'sdoc', '~> 0.4.0', group: :doc gem 'spring', group: :development gem 'therubyracer', platforms: :ruby gem 'uglifier', '>= 1.3.0' group :development do gem 'erb2haml' end group :test do gem 'faker' gem 'factory_girl_rails' gem 'json_spec' gem 'pry-byebug' gem 'pry-rails' gem 'rspec' gem 'rspec-given' gem 'rspec-rails' gem 'rspec-parameterized' gem 'nokogiri' end