gpt4 book ai didi

ruby-on-rails - 为什么我的 Rails 应用程序在控制台启动时忽略环境变量 DATABASE_URL?

转载 作者:行者123 更新时间:2023-11-29 12:45:31 24 4
gpt4 key购买 nike

tl;dr:

$ export DATABASE_URL=postgres://user:pwd@localhost:5432/new_db
$ RAILS_ENV=test bundle exec rails c
[1] pry(main)> ActiveRecord::Base.connection.current_database
=> "test"
[2] pry(main)> ActiveRecord::Base.establish_connection;nil
=> nil
[3] pry(main)> ActiveRecord::Base.connection.current_database
=> "new_db"
[4] pry(main)> # WTF ?!?

背景:我们目前正在主持多项工作,以构建、测试我们的开发和 QA 环境并将其推送到 heroku。由于我们在 database.yml 文件中具有相同的测试配置,因此当同时测试两个 env 时,我们以测试失败而告终,因此我们决定使用两个数据库。

我们正在尝试什么:为了实现这一点(使用具有相同 database.yml 文件的多个数据库),我们决定将 DATABASE_URL 环境变量的值设置为 'postgres://user: pwd@localhost:5432/new_db'.

问题是什么:DATABASE_URL 的值似乎仅在我们在控制台中手动运行 establish_connection 时使用。奇怪的是,运行 rake 对正确的数据库 (new_db) 有影响。

Rails 版本是 3.2.19

有什么方法可以正确覆盖该环境变量吗?

提前致谢!

最佳答案

您在 config/initializers 中有一个文件执行此操作:

Rails.application.config.after_initialize do
ActiveRecord::Base.connection_pool.disconnect!

ActiveSupport.on_load(:active_record) do
config = Rails.application.config.database_configuration[Rails.env]
config['reaping_frequency'] = ENV['DB_REAP_FREQ'] || 10 # seconds
config['pool'] = ENV['DB_POOL'] || 5
ActiveRecord::Base.establish_connection(config)
end
end

这个文件说:始终从 database.yml 加载配置,并添加两个参数 reaing_frequencypool

将初始值设定项更改为此可以解决问题:

Rails.application.config.after_initialize do
ActiveRecord::Base.connection_pool.disconnect!

ActiveSupport.on_load(:active_record) do
if !ENV['DATABASE_URL']
config = Rails.application.config.database_configuration[Rails.env]
config['reaping_frequency'] = ENV['DB_REAP_FREQ'] || 10 # seconds
config['pool'] = ENV['DB_POOL'] || 5
ActiveRecord::Base.establish_connection(config)
else
ActiveRecord::Base.establish_connection
end
end
end

注意:默认的 Rails 行为是先在 ENV['DATABASE_URL'] 中搜索配置,然后在 config/database.yml 中搜索配置。因此,如果您只是删除初始化程序,那也可以解决问题。

关于ruby-on-rails - 为什么我的 Rails 应用程序在控制台启动时忽略环境变量 DATABASE_URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25011578/

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