Ruby on rails rake看不到Rails.application.secrets
简而言之:Ruby on rails rake看不到Rails.application.secrets,ruby-on-rails,ruby-on-rails-4,rake,Ruby On Rails,Ruby On Rails 4,Rake,简而言之: rake似乎无权访问config/database.yml文件中的Rails.application.secrets 那么,config/secrets.yml的目的是什么 长: 当我跑的时候 RAILS_ENV=production rake db:migrate 虽然我在config/database.yml中指定了适当的值,并且连接的用户不应该是“root”,但我得到了错误Mysql2::error:Access denied for user'root'@'localhos
config/database.yml
文件中的Rails.application.secrets
config/secrets.yml
的目的是什么RAILS_ENV=production rake db:migrate
虽然我在config/database.yml
中指定了适当的值,并且连接的用户不应该是“root”,但我得到了错误Mysql2::error:Access denied for user'root'@'localhost'(使用密码:NO)
。这是各个配置文件的摘录:
# 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
以上证明,Rails.application.secrets[:database][:name]
解析为空
如何在rake
中访问Rails.application.secrets
?这是正确的解决方案吗
我知道我可以使用ENV[VARNAME]
来填写config/database.yml
的秘密部分。但是config/secrets.yml
文件的目的是什么呢
此外,我使用的是Passenger,这意味着web服务器可能无法访问.bashrc
中的变量(我在secret\u key\u base
中遇到了这个问题)。因此,我尽量避免使用环境变量。只是不想把我所有的秘密都泄露到服务器上
rails-4.2.2,UbuntuLTS14.04我还没有看到像你这样的
秘密的嵌套内容。您应该可以使用下面的代码
# config/secrets.yml
production:
secret_key_base: very-long-blah-blah-blah
name: app_db_name
username: app_db_user
password: app_db_password
在数据库.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 %>
#config/database.yml
制作:
不要认为这是您的全部问题,但您已将生产主机设置为localhost。服务器上的生产配置是什么样子的?我知道您没有使用heroku,但是运行heroku config
的等效功能是什么?乘客对中设置的环境变量没有问题。bashrc
@toddmetheny,使用本地主机有什么错?应用程序和数据库正在保存服务器上运行,据我所知,允许应用程序使用mysql套接字以“app_db_user”@“localhost”的身份连接到数据库。@j-dexx,是的,您是对的。看起来我在以前的实验中犯了一个错误.bashrc_profile
已读,谢谢。这样做有效,而且看起来更简单。我付出的代价是在互联网上找到了一些人的食谱:(当我从secrets.yml传递适配器时,它抛出此错误。无法加载'active_record/connection_adapters/_adapter'。请确保config/database.yml中的适配器有效。如果使用的适配器不是'mysql2'、'postgresql'或'sqlite3',请将必要的适配器gem添加到gem文件中。(加载错误)
# config/database.yml
production:
<<: *default
adapter: mysql2
host: localhost
database: <%= Rails.application.secrets.name %>
username: <%= Rails.application.secrets.username %>
password: <%= Rails.application.secrets.password %>