2016-07-11 11 views
0

Ich habe vor kurzem meine Rails Webapp mit Redis/Sidekiq integriert. Nachdem ich mit einer Unmenge von Konfigurationen gespielt hatte, wurde mir klar, dass ich etwas durcheinander gebracht habe, weil ich mich nicht mehr bei meiner Anwendung anmelden kann. Nach Referenzieren dieser Frage: Devise: Suddenly cannot log in anymore Ich dachte, es hat etwas mit meiner config/initializers/session_store.rb zu tun, aber ich nehme an, weil ich nicht genau weiß, wie genau diese Datei funktioniert, ist es schwierig für mich, diesen Fehler zu debuggen.Redis + Devise Konfiguration Verwirrung

Hier ist die tatsächliche Fehlermeldung, wenn ich versuche, mit guten Anmeldeinformationen anmelden:

ActionController::UrlGenerationError in Devise::SessionsController#create 
No route matches {:action=>"show", :controller=>"controllers"} missing required keys: [:id] 

Hier ist meine session_store.rb:

Rails.application.config.session_store :cookie_store, key: '_appname_session' 
AppName::Application.config.session_store :redis_store, servers: "redis://localhost:6379/0/session" 

Hier ist meine routes.rb Datei:

Rails.application.routes.draw do 
    resources :controllers 
    devise_for :users 
    require 'sidekiq/web' 
    mount Sidekiq::Web => '/sidekiq' 
end 

Verweis auf diesen Link: What is called session store? Ich bin mir bewusst, dass ein Session-Speicher nur s ist nach Sitzungsinformationen suchen, aber ich bin mir nicht sicher, wie sich das in diesen Fehler des Geräts einfügt.

Ich habe auch die richtige initializer Datei devise und in meiner config/Umgebungen/development.rb Ich habe

config.action_mailer.default_url_options = { host: 'localhost', port: 3000 } 

gemäß der Dokumentation.

Devise Initializer:

config.mailer_sender = '[email protected]' #haven't yet had the need to change this 
    config.secret_key = 'secret_key' 
    require 'devise/orm/active_record' 
    config.case_insensitive_keys = [:email] 
    config.strip_whitespace_keys = [:email] 
    config.skip_session_storage = [:http_auth] 
    config.stretches = Rails.env.test? ? 1 : 11 
    config.reconfirmable = true 
    config.expire_all_remember_me_on_sign_out = true 
    config.password_length = 6..128 
    config.email_regexp = /\A[^@\s][email protected][^@\s]+\z/ 
    config.reset_password_within = 6.hours 
    config.sign_out_via = :delete 
end 

Controller 'Controller' -> Dies ist eine echte Kuriosität für mich. Ich habe keine Erinnerung daran, dies selbst zu machen, und ich bin mir nicht sicher, ob es ein Nebenprodukt eines anderen Prozesses war, dem ich gefolgt bin, aber irgendwie in meiner Bewerbung endete. Unten finden Sie:

class ControllersController < ApplicationController 
    before_action :set_controller, only: [:show, :edit, :update, :destroy] 

    # GET /controllers 
    # GET /controllers.json 
    def index 
    @controllers = Controller.all 
    end 

    # GET /controllers/1 
    # GET /controllers/1.json 
    def show 
    end 

    # GET /controllers/new 
    def new 
    @controller = Controller.new 
    end 

    # GET /controllers/1/edit 
    def edit 
    end 

    # POST /controllers 
    # POST /controllers.json 
    def create 
    @controller = Controller.new(controller_params) 

    respond_to do |format| 
     if @controller.save 
     format.html { redirect_to @controller, notice: 'Controller was successfully created.' } 
     format.json { render :show, status: :created, location: @controller } 
     else 
     format.html { render :new } 
     format.json { render json: @controller.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    # PATCH/PUT /controllers/1 
    # PATCH/PUT /controllers/1.json 
    def update 
    respond_to do |format| 
     if @controller.update(controller_params) 
     format.html { redirect_to @controller, notice: 'Controller was successfully updated.' } 
     format.json { render :show, status: :ok, location: @controller } 
     else 
     format.html { render :edit } 
     format.json { render json: @controller.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    # DELETE /controllers/1 
    # DELETE /controllers/1.json 
    def destroy 
    @controller.destroy 
    respond_to do |format| 
     format.html { redirect_to controllers_url, notice: 'Controller was successfully destroyed.' } 
     format.json { head :no_content } 
    end 
    end 

    private 
    # Use callbacks to share common setup or constraints between actions. 
    def set_controller 
     @controller = Controller.find(params[:id]) 
    end 

    # Never trust parameters from the scary internet, only allow the white list through. 
    def controller_params 
     params.require(:controller).permit(:Reminder) 
    end 
end 

Würde mich über Hilfe bei der Fehlersuche freuen!

+0

Haben Sie etwas wie 'ControllersController' innerhalb Ihrer app/controllers? Könnten Sie auch Ihren Devise-Initialisierer posten? – oreoluwa

+0

Ich habe diese Information in dem Beitrag oben hinzugefügt! – Sunny

Antwort

0

Erstens müssen Sie Ihren session_store nicht für die Verwendung von redis konfigurieren.

Zweitens, konfigurieren Sie es zweimal in session_store.rb.

Ich schlage vor, Sie gem redis-rails zu Config redis verwenden leicht: https://github.com/redis-store/redis-rails

+0

Hallo Maverick, Danke für die Eingabe. Ich verwende tatsächlich redis-rails in meiner Anwendung und zog die Konfiguration session_store aus dem Wiki des Edelsteins: MyApplication :: Application.config.session_store: redis_store, Server: "redis: // localhost: 6379/0/session" https://github.com/redis-store/red-rails Macht es Ihnen etwas aus, was genau ich falsch gemacht habe? Danke noch einmal! – Sunny

+0

Es ist nicht notwendig, '' 'session_store''' zweimal zu konfigurieren, benutzen Sie einfach' 'cookie_store''' oder' '' redis_store''' und können Sie mir sagen, was '' resources: controllers''' ist Deine '' 'routes.rb''', kannst du sie entfernen? – Nathan

+1

Als ich die Ressourcen: Controller und die redis_store-Zeile entfernt habe, hat alles funktioniert. Nicht sicher, was genau falsch gelaufen ist, aber danke für die Hilfe! – Sunny