我运行的命令:
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
为什么不起作用?
答案 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”是我的模板数据库。