无法通过脚本使用ActiveRecord创建数据库

时间:2018-10-25 21:23:03

标签: ruby activerecord

我运行的命令:

config['development']
 => {"adapter"=>"mysql2", "encoding"=>"utf8mb4", "collation"=>"utf8mb4_bin", "pool"=>1, "username"=>"root", "password"=>nil, "host"=>"localhost", "database"=>"my_db"} 
ActiveRecord::Base.establish_connection(config['development'])
 => #<ActiveRecord::ConnectionAdapters::ConnectionPool:0x007fe20592b348 ...
ActiveRecord::Base.connection.create_database(config['development']['database'])
ActiveRecord::NoDatabaseError: Unknown database 'my_db'

它显示未知数据库,但实际上我正在尝试使用create_database创建数据库,并且遵循文档:

https://apidock.com/rails/ActiveRecord/ConnectionAdapters/PostgreSQLAdapter/create_database

为什么不起作用?

2 个答案:

答案 0 :(得分:0)

给出database.yml:

database.yml
default: &default
  adapter: mysql2
  encoding: utf8mb4
  collation: utf8mb4_bin
  pool: 5
  username: root
  password:
  host: localhost

development:
  <<: *default
  database: my_db
test:
  <<: *default
  database: my_db_test

我通过在没有数据库的情况下建立连接,然后创建数据库来使其工作:

@config = YAML.load(File.open(File.expand_path('../../lib/my_gem_config/database.yml', __FILE__)))
ActiveRecord::Base.establish_connection(config['default'])
ActiveRecord::Base.connection.create_database(@config['development']['database'])

答案 1 :(得分:0)

在postgres中创建数据库时,它将使用“模板”数据库进行复制。我尚未阅读有关ActiveRecord::Base.connection.create_database实际工作方式以及是否确实起作用的源代码。我可以使用您的代码创建数据库,除了我合并的配置哈希值:database: 'postgres', schema_search_path: 'public'之外,这似乎可以解决问题。在我的情况下,“ postgres”是我的模板数据库。