2017-05-31 6 views
0

Ich befolge ein Tutorial, um die Datenbank abhängig von der Subdomain zu ändern, die Subdomain muss der Name einer vorhandenen Datenbank sein, mit der das System wie in this tutorial um 15:30 Minuten verbunden wird und funktioniert ziemlich gut, Das Problem kommt, wenn auf das System zugegriffen wird mit einer Subdomain, deren Datenbank nicht existiert, zeigt mir den folgenden Fehler: Cannot open database "another_database" requested by the login. The login failed und die Anzeige des Fehlers erlaubt keinen Zugriff auf das System, unabhängig davon, ob es mit dem Namen zugegriffen wird eine vorhandene Datenbank in der Subdomäne, es sei denn, der Rails-Server wird neu gestartet.Fehler beim Versuch, die Datenbank zu ändern

Dies ist mein Code in meiner Application:

class ApplicationController < ActionController::Base 
    protect_from_forgery with: :exception 
    before_action :connect_to_database 


    def connect_to_user_database(name) 
    config = ActiveRecord::Base.configurations["development"].merge("database" => "#{name}") 
    ActiveRecord::Base.establish_connection(config) 
    #auth = name 
    #raise auth.to_yaml #podemos ver los datos que nos ofrece el parametro 
    end 


    private 

    def connect_to_database 
    connect_to_user_database(request.subdomains(0).first) 
    end 

end 
+0

Aus Sicherheitsgründen und um Fehler zu vermeiden, sollten Sie überprüfen, ob die Subdomäne vor 'connect_to_database' gültig ist. – wesley6j

+0

@ wesley6j danke für die Antwort, aber wie kann ich überprüfen, ob die Datenbank existiert? –

+3

Wenn Sie eine Liste von Subdomains haben, die Sie verwenden möchten, speichern Sie das Array irgendwo in Ihrer Codebasis oder Konfigurationsdatei. – wesley6j

Antwort

0

Mit so etwas wie dem, was in dieser Antwort https://stackoverflow.com/a/25592558/8088139 baut einen Haken Situation anmutig scheitern getan wird, wenn die Datenbank nicht

existiert

so etwas wie

def connect_to_user_database(name) 
    config = ActiveRecord::Base.configurations["development"].merge("database" => "#{name}") 
    ActiveRecord::Base.establish_connection(config) 
rescue ActiveRecord::NoDatabaseError 
    clear_cache! 
    #set response to forbidden 
    #log the failure 
end 

BEARBEITEN: hinzugefügt clear_cache! NoDatabaseError rescue

+0

Danke für die Antwort, ich eingefügt den Code, aber es zeigt immer noch den gleichen Fehler –

+0

Versuchen Sie, diesen Befehl im Rettungsfall "clear_cache!" Bearbeitung Antwort mit dieser –

+0

Ich legte Ihren Code und ich startete den Rails-Server, aber ich bekomme immer noch den gleichen Fehler, wenn ich den Namen einer vorhandenen Datenbank eingeben, wenn ich zuerst eine Datenbank eingeben, die nicht existiert. –

Verwandte Themen