简而言之:
Rails.application.secrets
文件config/database.yml
config/secrets.yml
那么?长期:
当我跑步时
RAILS_ENV=production rake db:migrate
我收到错误Mysql2::Error: Access denied for user 'root'@'localhost' (using password: NO)
,但我在config/database.yml
中指定了适当的值,并且用户连接不应该是'root'。这是各个配置文件的摘录:
# config/database.yml
production:
<<: *default
adapter: mysql2
host: localhost
database: <%= Rails.application.secrets[:database][:name] %>
username: <%= Rails.application.secrets[:database][:username] %>
password: <%= Rails.application.secrets[:database][:password] %>
# config/secrets.yml
production:
secret_key_base: very-long-blah-blah-blah
database:
name: app_db_name
username: app_db_user
password: app_db_password
似乎rake
无法访问Rails.application.secrets
。当我在database.yml
中明确地输入必要的值时,运行迁移会成功,例如,如下所示:
production:
<<: *default
adapter: mysql2
host: localhost
database: <%= Rails.application.secrets[:database][:name] || 'app_db_name' %>
username: <%= Rails.application.secrets[:database][:username] || 'app_db_user' %>
password: <%= Rails.application.secrets[:database][:password] || 'app_db_password' %>
以上证明Rails.application.secrets[:database][:name]
无法解决问题。
如何访问Rails.application.secrets
中的rake
?这是正确的解决方案吗?
我知道我可以使用ENV[VARNAME]
填写config/database.yml
的秘密部分。但是config/secrets.yml
文件的目的是什么呢?
此外,我正在使用Passenger,这意味着Web服务器可能无法访问.bashrc
中的变量(我在secret_key_base
时遇到此问题)。因此我尽量避免使用环境变量。只是不想把我所有的秘密泄露到整个服务器上。
rails-4.2.2,Ubuntu LTS 14.04
答案 0 :(得分:1)
我没有看到secrets.yml
这样的 嵌套内容 ,而且release notes也没有这种类型。您可以使用以下代码
# config/secrets.yml
production:
secret_key_base: very-long-blah-blah-blah
name: app_db_name
username: app_db_user
password: app_db_password
在database.yml
# config/database.yml
production:
<<: *default
adapter: mysql2
host: localhost
database: <%= Rails.application.secrets.name %>
username: <%= Rails.application.secrets.username %>
password: <%= Rails.application.secrets.password %>