我将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"
但是我也创建了所有扩展。 我已经待了一个多小时了,但仍然不明白为什么会这样...
谢谢!
答案 0 :(得分:2)
对我来说,这是因为我的一个初始化器中有一些依赖于模型的逻辑。
这在以前从来都不是问题,但是自从设置 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"