4

Ruby On Rails 3.0.9 を使用していますが、開発環境ではすべて正常に動作します。プロダクション環境に切り替えるか、サーバーにアップロードすると、サインイン後に同じログイン ページに戻ります。ログを確認すると、次のことがわかります。

Started POST "/users/login" for 127.0.0.1 at Thu Oct 03 16:48:13 -0300 2013
  Processing by UserSessionsController#create as HTML
  Parameters: {"user"=>{"password"=>"[FILTERED]", "login"=>"demo_admin"}, "utf8"=>"✓", "authenticity_token"=>"+7AEoVXZ9XiagEymVUnOhFHnck4rgDu883E/ySMlCxQ="}
Redirected to http://localhost:3000/admin
Completed 302 Found in 111ms


Started GET "/admin" for 127.0.0.1 at Thu Oct 03 16:48:13 -0300 2013
  Processing by Admin::DashboardController#index as HTML
Completed 401 Unauthorized in 1ms

アクセスを管理するためにauthorization_rulesファイルを使用していますが、前述のようにDev環境では問題ありません。

アクションにブレークポイントを配置すると、admin/dashboard#index到達していないため実行されません。httpserverファイルで壊れます(段階的にデバッグしました)が、Prod envではなくDevで機能する理由がわかりません。

助けてください。

ありがとう、ブライアン

アップデート

ApplicationControllerの には before_filter という呼び出しがcheck_plan_featuresあり、それが最初に要求するのはunless current_user.blank? #redirects to Admin section.

サインインした後、Devise を使用しcurrent_userてユーザーの値を持っていることに気付きましたが、管理セクションにリダイレクトした後、同じフィルターに戻り、今回current_userは null です。したがって、どういうわけか、管理セクションにアクセスしようとした後、ユーザーのセッションが破棄されたと思います。しかし、これは本番環境でのみ発生するため、何が原因なのかまだ疑問に思っています。

4

1 に答える 1

1

この正確な問題が発生しました(レール4とデバイス3を使用)。

解決策は、次のようにドメイン宣言をconfig/initializers/session_store.rbファイルに追加することでした。

YourAppName::Application.config.session_store :cookie_store, key: '_your_session', domain: {
  production: 'production_domain',
  development: 'development_domain'
}.fetch(Rails.env.to_sym, :all)

ただし、アプリケーションにサブドメインを追加したため、これが最初に変更されたことは重要です。

于 2014-07-22T11:16:21.187 に答える