cod*_*aks 5 postgresql ruby-on-rails-5
我正在使用 Rails 5.2.2.1 和 postgresql 10.6,并且无法在我的开发环境中创建数据库。当我跑步时
bin/rake db:create
Run Code Online (Sandbox Code Playgroud)
或者
bundle exec rake db:create
Run Code Online (Sandbox Code Playgroud)
我明白了
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'
Run Code Online (Sandbox Code Playgroud)
我正在尝试创建数据库,因此它自然不存在。然而,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"
Run Code Online (Sandbox Code Playgroud)
不过我也创建了所有扩展。我已经研究了一个多小时了,但仍然不明白为什么会发生这种情况......
谢谢!
对我来说,这是因为我的初始化程序之一中有一些依赖于模型的逻辑。
这以前从来都不是问题,但自从设置 CI 以来,我需要修改我的项目,以便它从模型相关部分的初始化程序中排除一些逻辑。
对于initializer_example.rb:
# non model dependent
Aws.config(secret_key: xyz, access_key: zyx)
# model dependent
User.where(admin:true).update(field: value)
Run Code Online (Sandbox Code Playgroud)
到:
# 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
Run Code Online (Sandbox Code Playgroud)
仅当数据库已加载(即在生产中)时,这才会照常运行初始化程序
至于我的 CI/测试环境,我在测试之前修改 RSPEC 以再次加载初始化程序(我知道这是不好的做法)(当然,在这个阶段应该配置环境,以便这次它将正常运行),使用以下代码:
load "#{Rails.root}/config/initializers/initializer_example.rb"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1808 次 |
| 最近记录: |