web-dev-qa-db-ja.com

定数ユーザーの自動読み込み中に循環依存が検出されました

私はこのチュートリアル( http://railscasts.com/episodes/236-omniauth-part-2 )に従ってOmniAuthとDeviseでFacebookログインを作成しましたが、次のエラーが発生します。私のroutes.rbの定数ユーザーの自動読み込み

  devise_for :users , :controllers => {:registrations => 'registrations'}

registrations_controller.rb

Class RegistrationsController < Devise::RegistrationsController

  def create
    super
    session[:omniauth] = nil unless @user.new_record?
  end

  private

  def build_resource(*args)
    super
    if session["devise.omniauth"]
      @user.apply_omniauth(session["devise.omniauth"])
      session["devise.omniauth"] = nil
   end
  end
end

そして、ここにAuthenticationsControllerからの私のcreateメソッドがあります

def create
    omniauth = request.env["omniauth.auth"]
    authentication = Authentication.find_by_provider_and_uid(omniauth['provider'], omniauth['uid'])
    if authentication
      flash[:notice] = "Signed in successfully."
      sign_in_and_redirect(:user, authentication.user)
    elsif current_user
      current_user.authentications.create!(:provider => omniauth['provider'], :uid => omniauth['uid'])
      flash[:notice] = "Authentication successful."
      redirect_to authentications_url
    else
      user = User.new
      user.apply_omniauth(omniauth)
      if user.save
        flash[:notice] = "Signed in successfully."
        sign_in_and_redirect(:user, user)
      else
        session[:omniauth] = omniauth.except('extra')
        redirect_to new_user_registration_url
      end
    end
end
13
Bejan George

registrations_controller.rbはどこに保存されましたか?場所は重要です。 app/controllers/devise/.への保存を間違えていることがわかりました。単にapp/controllers/.に保存する必要があります。例:

app/controllers/registrations_controller.rb


また、config/routes.rbルートは次のように定義する必要があります。

devise_for :users, controllers: { registrations: 'registrations' }

12
Jonathan

さて、私のdevelopment.rbに次の行を追加した後、私は安心しました

config.middleware.delete Rack::Lock

参照: https://github.com/websocket-Rails/websocket-Rails/issues/101

やっとこれを試すことができます。

2
Rubyrider

同様の問題がありました。

そして、コントローラ内の別のフォルダに同じファイルが複製されていることに気づき、それが問題の原因でした。

同じ内容の両方のファイルがありました:

  app/controllers/logs_controller.rb
  app/controllers/api/logs_controller.rb
2

Libの一部のクラスで同じ問題が発生しました(config.autoload_paths += Dir["#{config.root}/lib/**/"]を使用)

私のためにRailsを4.0.0.rc1から4.0.0に切り替えるのを助けました

2
ondrejbartas

多くの宝石が壊れ始めましたRails 4、すべてコントローラーでアンロードできない問題が原因です https://github.com/flyerhzm/switch_user/issues/34 = https://github.com/thoughtbot/high_voltage/issues/68https://github.com/thoughtbot/clearance/issues/276 その他多数

どのgemが問題を引き起こしているかのエラーを調べる必要があります。次のことがわかったら、1)そのgemの未解決の問題を確認します。2)その問題が存在して修正されている場合は、その修正があることを確認するか、gemを更新します。 3)できない場合は、問題を作成し、修正するよう依頼できます。 4)それらの修正を待ちたくない場合は、gemを作成して修正をプッシュすることができます https://github.com/cashins/email_preview/commit/b34a077a954b98bd086153fae8979ad142667555 すべての修正は同じです(指定されたコントローラーからアンロード可能を削除しています)

それが役に立てば幸い。

Railsバージョンのダウングレードに役立つものがない場合。

0
Sahil Dhankhar

私はこれがdevelopment.rbで機能することを発見しました:

config.reload_classes_only_on_change = false

(私は以前、Gemfile.lockを削除してバンドルの更新を実行したり、Railsバージョンを変更したりしました。ここや他の場所で言及されています。それらは私にとっては機能しませんでした。)

0
mahemoff

私はタイプミスで同じエラーを作成しました、私は持っていました

module EmployeeReminderssHelper

ヘルパーファイルが呼び出されたとき

employee_reminders_helper.rb

(余分な「s」に注意してください)

0
jared