5

総括する :

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」をロードします。

これらのコマンドはすべて成功しました。

他の手がかりを見つけるためのアイデアが不足しています。何か提案はありますか?

ありがとうございました。

4

1 に答える 1

2

レールサーバーを再起動します

gem は、レールがアクセスする必要がある新しいコードを導入します。新しいコードを Rails で利用できるようにするために、次の 3 つの手順を実行します。

  1. Gemfile を変更する
  2. バンドル インストール
  3. レールサーバーを再起動します

一歩を忘れやすい。

于 2016-10-28T11:59:45.513 に答える