【发布时间】:2021-02-27 07:27:46
【问题描述】:
我在 Rails 服务器上使用 localhost postgres db,最近更新了我的 databse.yaml 文件以指向 rds,但我发现我的服务器仍在将数据保存到旧数据库 ie.localhost 而不是 rds。
我所做的所有更改都在Rails.configuration.database_configuration 中可用,但是当我检查ActiveRecord::Base.connection.raw_connection.conninfo_hash 时,它显示的是我的旧数据库而不是新数据库。
我尝试将 db name 设置为 nil,但 ActiveRecord::Base.connection.raw_connection.conninfo_hash 中仍未显示此更改,因此我的服务器似乎没有使用我对 databse.yaml 的新更改
在本地,当我尝试在暂存环境中运行应用程序时,它正确地使用了新的数据库信息,但它没有在我的远程暂存服务器中使用新的数据库信息。
我尝试使用 cap staging deploy:restart 重新启动 rails 服务器,重新启动我的 aws ec2 实例但仍然没有成功
使用 capistrano 将应用部署到远程服务器
default: &default
adapter: postgresql
encoding: utf8
pool: 5
username: postgres
password:
# socket: /var/run/mysqld/mysqld.sock
development:
<<: *default
database: JandR_development
production:
<<: *default
database: qwerty
username: asdfg
password: zxcv
staging:
adapter: postgresql
encoding: utf8
pool: 5
database: <%= Rails.application.credentials.dig(:staging_db, :database) %>
username: <%= Rails.application.credentials.dig(:staging_db, :username) %>
password: <%= Rails.application.credentials.dig(:staging_db, :password) %>
host: <%= Rails.application.credentials.dig(:staging_db, :host) %>
port: 5432
old db config
staging:
<<: *default
database: dbname same as new db name
username: username same as new username
password: password same as new password
我的 capistrano 暂存配置文件只有以下行处于活动状态
server 'my_server_ip', user: 'deploy', roles: %w{app db web}
【问题讨论】:
-
您的旧数据库配置是什么?您的暂存 capistrano 配置是什么?
-
@eux 我添加了旧的数据库配置,上限暂存详细信息
-
只要确定:您是否在 capistrano 配置文件中
set :rails_env, 'staging''?您是否在登台服务器控制台上检查了Rails.env? -
我使用 sudopassenger-status 检查了我在服务器中的环境,它似乎表明我在生产环境中。但服务器仍在使用我在 databse.yaml 文件中提到的暂存密钥中的 db 详细信息
-
很奇怪。它在本地工作,因此在远程服务器上应该有问题。如果没有其他方法,您可以尝试部署到新服务器。
标签: ruby-on-rails postgresql capistrano passenger