web-dev-qa-db-fra.com

Dépendance circulaire détectée lors du chargement automatique de l'utilisateur constant

J'ai suivi ce tutoriel ( http://railscasts.com/episodes/236-omniauth-part-2 ) pour la création d'une connexion à Facebook avec OmniAuth et Devise et j'ai l'erreur suivante: Une dépendance circulaire a été détectée lors du chargement automatique. Utilisateur constant dans mes 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

et voici ma méthode de création de AuthenticationsController

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

Où votre registrations_controller.rb a-t-il été enregistré? L'emplacement est important. J'ai trouvé que je faisais une erreur en l'enregistrant en app/controllers/devise/.. Il fallait simplement qu'il soit enregistré dans app/controllers/. exemple:

app/controllers/registrations_controller.rb


De plus, config/routes.rb route devrait être défini comme suit: 

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

11
Jonathan

Eh bien, je suis soulagé après avoir ajouté la ligne suivante dans mon développement.rb

config.middleware.delete Rack::Lock

Référence: https://github.com/websocket-Rails/websocket-Rails/issues/101

Vous pouvez essayer cette fois enfin.

2
Rubyrider

J'avais un problème similaire.

Et puis j'ai réalisé que le même fichier était dupliqué dans différents dossiers du contrôleur, ce qui était à l'origine du problème.

J'ai eu les deux fichiers avec le même contenu:

  app/controllers/logs_controller.rb
  app/controllers/api/logs_controller.rb
2
Daniel Pérez Rada

J'ai le même problème avec certaines classes de lib (utilisé config.autoload_paths += Dir["#{config.root}/lib/**/"])

pour moi a aidé à faire passer Rails de 4.0.0.rc1 à 4.0.0

2
ondrejbartas

beaucoup de gemmes ont commencé à casser sur Rails 4, en raison du problème de déchargement dans les contrôleurs. https://github.com/flyerhzm/switch_user/issues/34https://github.com/thoughtbot/high_voltage/issues/68https://github.com/thoughtbot/clearance/issues/276 et bien d'autres 

vous devriez rechercher dans les erreurs le type de gem qui crée le problème. Une fois que vous savez que: 1) Vérifiez les problèmes non résolus de cette gemme. 2) Si le problème est résolu et corrigé , assurez-vous que vous avez ce correctif ou bien mettez à jour la gemme. 3) Sinon, vous pouvez créer un problème et leur demander de le résoudre. 4) Si vous ne voulez pas attendre leur réparation , vous pouvez former la gemme et proposer un correctif https://github.com/cashins/email_preview/commit/b34a077a954b98bd08615ffae8979ad142667555 tous les correctifs sont identiques (suppression de la suppression). le contrôleur spécifié)

J'espère que ça aide.

si rien ne vous aide à déclasser votre version de Rails.

0
Sahil Dhankhar

J'ai trouvé cela fonctionne dans development.rb:

config.reload_classes_only_on_change = false

(J'ai déjà essayé de supprimer Gemfile.lock et d'exécuter la mise à jour de paquet, ainsi que de changer de version de Rails, comme mentionné ici et ailleurs. Ils ne m'ont pas fonctionné.)

0
mahemoff

J'ai créé la même erreur avec une faute de frappe, j'avais

module EmployeeReminderssHelper

quand le fichier d'assistance a été appelé

employee_reminders_helper.rb

(Notez les extra 's')

0
jared