Ruby on rails ActiveRecord::Tasks::DatabaseTasks.create未定义的方法“[]';零级:零级
我正在尝试为多租户应用程序动态创建数据库,如下所示:Ruby on rails ActiveRecord::Tasks::DatabaseTasks.create未定义的方法“[]';零级:零级,ruby-on-rails,postgresql,activerecord,Ruby On Rails,Postgresql,Activerecord,我正在尝试为多租户应用程序动态创建数据库,如下所示: def signup ActiveRecord::Base.establish_connection "#{Rails.env}".to_sym @site = Site.new(title: params[:site_title], host: params[:site_host], template: 'bare') if(@site.save) conn_con
def signup
ActiveRecord::Base.establish_connection "#{Rails.env}".to_sym
@site = Site.new(title: params[:site_title], host: params[:site_host], template: 'bare')
if(@site.save)
conn_config = ActiveRecord::Base.connection_config
conn_config[:database] = @site.id
conn_config[:host] = 'localhost'
puts conn_config
#ActiveRecord::Base.establish_connection conn_config
ActiveRecord::Tasks::DatabaseTasks.database_configuration = conn_config
ActiveRecord::Tasks::DatabaseTasks.create
%x[rake db:sites]
@user = User.new(name: params[:name], email: params[:email], password: params[:password], password_confirmation: params[:password_confirm])
if @user.save
else
end
else
end
end
网站是在适当的数据库中创建的,但是如果我尝试使用数据库tasks.create
,要创建我的网站数据库,我会得到:
undefined method `[]' for nil:NilClass
Couldn't create database for nil
Completed 500 Internal Server Error in 445ms (ActiveRecord: 296.7ms)
NoMethodError (undefined method `[]' for nil:NilClass):
app/controllers/auth_controller.rb:16:in `signup'
第16行是创建行puts conn_config
那里给了我{:adapter=>“postgresql”,:encoding=>“unicode”,:pool=>5,:database=>“869acf95-6945-4a50-8101-75ed7b813e12”,:host=>“localhost”}
,所以id肯定被设置为数据库名
这里有什么问题,我可以做些什么来修复它?
>ActiveRecord::Tasks::DatabaseTasks.create conn_config
或创建新taskclass并传递配置
因为
def create(*arguments)
configuration = arguments.first
$stderr.puts "Couldn't create database for #{configuration.inspect}"
这是一个小小的进步。错误中的一行更改了&没有创建数据库:无法为{:适配器=>“postgresql”、:编码=>“unicode”、:主机=>“localhost”、:池=>5、:数据库=>“00e2754a-a6fc-44d3-9a74-c24dcd5c406f”}创建数据库,其中配置[“主机”]配置[“端口”]配置[“密码”]和配置[“用户名”]也指定了这些。无法为{:适配器=>“postgresql”、:编码=>“unicode”、:主机=>“localhost”、:池=>5、:数据库=>“CEFB4BA-d7e9-4045-a711-79912e325ce2”、:密码=>“[snipped]”、:用户名=>“rando”、:端口=>5432}用户确实存在。
为nil未定义的方法“[]”NilClass无法为{:适配器=>“postgresql”、:编码=>“unicode”创建数据库,:host=>“localhost”,:pool=>5,:database=>“cefbb4fa-d7e9-4045-a711-79912e325ce2”,:password=>“-snip-”,:username=>“rando”,:port=>“5432”}在420ms(ActiveRecord:266.8ms)的时间内完成了500个内部服务器错误NoMethodError(对于nil:NilClass,未定义的方法“[]”):app/controllers/auth_controller.rb:15:in“注册”
(删除了上面的一个空行,因此15现在是创建行)尝试ActiveRecord::Tasks::DatabaseTasks.create([conn_config]),但是你会得到类似TypeError的结果:没有将字符串隐式转换为整数