Railsアプリのバンドラーによって単一のgemがロードされず、本番環境でのみロードされるという問題があります-開発モードでgemを使用しても問題はありません。
gem はcountry_selectで、バージョン 1.1.3 と github リポジトリで試しました。アプリは Rails 3.2.11 を使用しています。
gem がサーバー上に存在することの証明
gem は、バンドラーによって本番環境に正常にインストールされます。
$ RAILS_ENV=production bundle install
...
Using coffee-rails (3.2.2)
Using country_select (1.1.3)
Using daemons (1.1.9)
...
Your bundle is complete! It was installed into /home/deploy/rails-app/shared/bundle
gem は、バンドラーがインストールする共有 gem ディレクトリに表示されます。
$ ls -al /home/deploy/rails-app/shared/bundle/ruby/1.9.1/gems/ | grep country
drwxrwxr-x 3 deploy deploy 4096 Apr 3 08:49 country_select-1.1.3
コンソールからレールを起動すると、gem が読み込まれます。
$ RAILS_ENV=production script/rails c
Loading production environment (Rails 3.2.11)
irb(main):002:0> Gem.loaded_specs.keys.grep /country/
=> ["country_select"]
でも...
country_select
Rails アプリでの宝石の同じチェックは失敗します。例えば:
class ApplicationController < ActionController::Base
before_filter do
raise Gem.loaded_specs.keys.grep(/country/).inspect
end
#...
end
吐き出し[]
ます - つまり、gem はロードされません。さらに、gem に依存するアプリケーションの一部は、gem が存在しないために失敗します。
そして最後に、質問
スタートアップのどこかにを追加するだけrequire 'country_select'
で、gem が読み込まれ、アプリが動作します。しかし、bundler が特定の gem をインストールしてアプリの gem ディレクトリに追加しているにもかかわらず、なぜ bundler はその特定の gem でそれを行わないのでしょうか?
本番環境に関する詳細情報:
$ rvm -v
rvm 1.18.18 (stable)...
$ ruby -v
ruby 1.9.3p392 (2013-02-22 revision 39386) [x86_64-linux]
$ gem -v
1.8.25
$ bundle -v
Bundler version 1.3.2
更新: 2013 年 4 月 5 日
問題は「なくなった」ようです。数回の再展開の後、機能しているように見えます。これは、country_select gem が変更されていないにもかかわらず、非常に奇妙です。その間に何が変わったのかを正確に調べていますが、困惑しています。