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的结果:没有将字符串隐式转换为整数