0

Nginx を使用して本番環境にDelayed_Job_Active_Record gem を実装する際に問題があります。ユーザーが「お問い合わせ」フォームを送信すると、関連するコントローラー アクションが Nginx によって呼び出され、次のコード行が失敗します。

@contact.delay.send_contact_form

関連するメソッドは次のとおりです。

def send_contact_form
   ContactMailer.contact_us(self).deliver
end  


開発環境:OK

  • 私のローカル マシンには、Webrick が提供するページがあります。すべてが正常に実行され、遅延ジョブは「Delayed_Jobs」テーブルを通過し、電子メールが送信されます。


本番環境 - Rails コンソール: OK

  • サーバー上で手動で作成@contactして呼び出すと@contact.delay.send_contact_form、遅延ジョブは遅延ジョブ テーブルを通過し、電子メールが送信されます。


本番環境 - Webrick: OK

  • サーバー上で Rails Webrick サーバーを起動し@contact、Web インターフェイスを介してデータを入力し、ジョブを送信すると、遅延ジョブ テーブルが通過し、電子メールが送信されます。


本番環境 - Nginx: エラー

  • アプリケーションは現在、Nginx によって提供されています。
  • Nginx 経由でインターフェイスにアクセスし、データを入力して@contact送信すると、ページがハングします。
  • プロダクション ログには、コントローラ アクションで次のエラーが表示されます (上記の行を参照)。

    NoMethodError (未定義のメソッド `delay' for #< Contact:0x000000052962b0>)


Rails、Ruby、Delayed_Job_Active_Record および Daemons gem のバージョンが両方の環境で同じであることも確認しました。

私はしばらくこれにこだわっていたので、どんな助けも大歓迎です。Nginx で動作し、「遅延ジョブ」と同じ機能を提供するソリューションを見つけたいと考えています。

ありがとう。

4

1 に答える 1

0

問題は、コード更新の展開時に Unicorn/Nginx が再起動されず、不適切な構成のままになっていることが判明しました。この問題は、Devise やその他の gem をアプリケーションに追加するときにも発生しました。

最初の解決策は、展開後に (Capistrano 経由で) VPS シェルにログインし、次を実行することでした。

ユニコーンを再起動します。

/etc/init.d/unicorn_esg stop
/etc/init.d/unicorn_esg start

*unicorn_esg* は、私の deploy.rb 構成で使用されるアプリケーションへの Unicorn 参照です。

Nginx を再起動します。

sudo service nginx restart

次のステップは、これを deploy.rb スクリプトの最後に組み込み、各デプロイメントの最後に自動的に実行されるようにすることです。

于 2013-05-11T09:04:38.677 に答える