耙子没看到 Rails.application.secrets
rake not seeing Rails.application.secrets
简而言之:
- rake 似乎无法访问
config/database.yml
文件中的 Rails.application.secrets
- 那
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]
无解
如何在 rake
中访问 Rails.application.secrets
?这是正确的解决方案吗?
我知道我可以使用ENV[VARNAME]
来填写config/database.yml
的秘密部分。但是 config/secrets.yml
文件的目的是什么?
此外,我正在使用 Passenger,这意味着 Web 服务器可能无法访问 .bashrc
中的变量(我在 secret_key_base
中遇到了这个问题)。因此我尽量避免使用环境变量。只是不想让我所有的秘密都泄露到整个服务器。
rails-4.2.2,Ubuntu LTS 14.04
我还没有看到像您这样的嵌套内容 secrets.yml
,[=14= 】 没有这种。您应该可以使用以下代码
# 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 %>
简而言之:
- rake 似乎无法访问
config/database.yml
文件中的Rails.application.secrets
- 那
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]
无解
如何在 rake
中访问 Rails.application.secrets
?这是正确的解决方案吗?
我知道我可以使用ENV[VARNAME]
来填写config/database.yml
的秘密部分。但是 config/secrets.yml
文件的目的是什么?
此外,我正在使用 Passenger,这意味着 Web 服务器可能无法访问 .bashrc
中的变量(我在 secret_key_base
中遇到了这个问题)。因此我尽量避免使用环境变量。只是不想让我所有的秘密都泄露到整个服务器。
rails-4.2.2,Ubuntu LTS 14.04
我还没有看到像您这样的嵌套内容 secrets.yml
,[=14= 】 没有这种。您应该可以使用以下代码
# 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 %>