総括する :
Gem pg_search によって提供されるモジュール PgSearch は、ステージング環境 (Rbenv、nginx、unicorn、capistrano) に含めることも、要求することも、ロードすることもできません。問題は http を介して Web サーバーで発生しますが、ステージング サーバーの rails コマンドには表示されません。他の gem によって提供される他のモジュールは、エラーなしで含めることができます。
ローカル開発環境(rvm、puma)では問題ありません。
詳細
私は現在、git リポジトリが bitbucket でホストされている ruby 2.0.0 を使用して、Ruby On Rails 4.0 アプリケーションを開発しています。capistrano を使用して、ステージング サーバー経由でアプリをデプロイします。
- ステージングサーバー環境:rbenv、nginx、unicorn
- ローカル開発環境: rvm と puma
両方のレール環境ファイル (environment/production.rb & environment/staging.rb) は同じです。
私がしたこと:
pg_search gem (PostgreSQL 全文検索 gem) を Gemfile に追加してインストールし、pg_search gem で使用したいアクティブ レコード モデルに「include PgSearch」句を追加しました。
アプリを開発モードで実行しました...動作します!
問題 :
変更をステージング サーバーに展開した後: http サーバーを介して、次のエラーが発生します。
App::MyController#index の NameError 初期化されていない定数 MyActiveRecordModel::PgSearch
(通常、GemFile に含まれるこの pg_search gem には、オートロード検索パスに含まれる lib/*.rb ファイルと、load "pg_search.rb"、require"pg_search"、または"include PgSearch" (モジュールが含まれる)などの句が必要です。 pg_search.rb ファイル内) を渡す必要があります。
バグを修正する手がかりを見つけるために、私は持っています:
-宝石が提供する他のモジュールを含めることができるかどうかを試しました...動作します
ステージング サーバーの現在のリリース パスに移動した後、「bundle exec rails c staging」を実行し、次のことを試みました。
ActiveRecord モデル (PgSearch を含めました) のインスタンス化が機能するかどうかを確認してください。
宝石によって提供されたモジュールがサーバー上で見つかり/ロードされ、実行されたかどうかを確認します-PgSearchを含め、「pg_search」を要求し、「pg_search.rb」をロードします。
これらのコマンドはすべて成功しました。
他の手がかりを見つけるためのアイデアが不足しています。何か提案はありますか?
ありがとうございました。