2017-05-31 160 views
0

我正在按照子域進行數據庫更改的教程,該子域必須是系統將連接到的現有數據庫的名稱,如在012:在15:30分鐘中所示並工作相當好,問題來了,當系統訪問一個子域的數據庫不存在,給我看到以下錯誤:Cannot open database "another_database" requested by the login. The login failed 並顯示錯誤不允許訪問系統,無論是否訪問的名稱爲子域中的現有數據庫,除非導軌服務器重新啓動。嘗試更改數據庫時出錯

這是我在我的ApplicationController代碼:

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

爲了安全起見並避免錯誤,您應該在'connect_to_database'之前檢查子域是否有效。 – wesley6j

+0

@ wesley6j謝謝你的回答,但是如何檢查數據庫是否存在? –

+3

如果您有要使用的子域列表,請將該數組保存在代碼庫或配置文件中的某處。 – wesley6j

回答

0

使用的東西喜歡在這個答案https://stackoverflow.com/a/25592558/8088139 構建一個catch情況正常失敗做,如果該數據庫不存在

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 

編輯:增加了clear_cache!到NoDatabaseError救援

+0

感謝您的回覆,我粘貼的代碼,但它仍然顯示我相同的錯誤 –

+0

嘗試在救援情況下運行此命令 「clear_cache!」 用這個編輯答案 –

+0

我放置了你的代碼,我開始了rails服務器,但是當我第一次輸入一個不存在的數據庫時,當我輸入一個現有數據庫的名字時,我仍然得到相同的錯誤。 –

相關問題