我按照教程更改数据库,具体取决于子域,子域名必须是系统将连接到的现有数据库的名称,如this tutorial所示,时间为15:30工作得很好,问题来自使用不存在数据库的子域访问系统时,显示以下错误:Cannot open database "another_database" requested by the login. The login failed
并且显示错误不允许访问系统,无论是否使用子域中现有数据库的名称访问它,除非重新启动rails服务器。
这是我在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 :(得分: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救援