gpt4 book ai didi

postgresql - 耙分贝 :create throws “database does not exist” error with postgresql

转载 作者:行者123 更新时间:2023-12-03 19:30:04 24 4
gpt4 key购买 nike

我将 rails 5.2.2.1 与 postgresql 10.6 一起使用,但无法在我的开发环境中创建数据库。当我跑

bin/rake db:create

或者
bundle exec rake db:create

我得到
rake aborted!
ActiveRecord::NoDatabaseError: FATAL: database "mplaces_dev" does not exist
/home/user/.rvm/gems/ruby-2.5.3/gems/activerecord-5.2.2.1/lib/active_record/connection_adapters/postgresql_adapter.rb:696:in `rescue in connect'
/home/user/.rvm/gems/ruby-2.5.3/gems/activerecord-5.2.2.1/lib/active_record/connection_adapters/postgresql_adapter.rb:691:in `connect'

我正在尝试创建数据库,因此它自然不存在。但是 rails 应该创建它......这是我的 config/database.yml:
development:
adapter: postgis
database: mplaces_dev
encoding: unicode
username: postgres
password: postgres
host: localhost
postgis_extension: true
schema_search_path: "public,postgis"

但是我也创建了所有的扩展。
我已经在这里呆了一个多小时了,但仍然无法理解为什么会发生这种情况......

谢谢!

最佳答案

对我来说,这是因为我的一个初始化程序中有一些依赖于模型的逻辑。
以前这从来都不是问题,但是自从设置 CI 后,我需要修改我的项目,以便它从模型相关部分的初始化程序中排除一些逻辑。
对于 initializer_example.rb:

# non model dependent
Aws.config(secret_key: xyz, access_key: zyx)

# model dependent
User.where(admin:true).update(field: value)
到:
# non model dependent
Aws.config(secret_key: xyz, access_key: zyx)

# model dependent
db_loaded = ::ActiveRecord::Base.connection_pool.with_connection(&:active?) rescue false
if db_loaded
User.where(admin:true).update(field: value)
end
只有在数据库已加载(即在生产中)时,这才会像往常一样运行初始化程序
至于我的 CI/测试环境,我修改 RSPEC 以在测试之前再次加载初始化程序(我知道不好的做法)(当然在这个阶段应该配置环境,所以这次它会正常运行)使用代码:
load "#{Rails.root}/config/initializers/initializer_example.rb"

关于postgresql - 耙分贝 :create throws “database does not exist” error with postgresql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55792039/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com