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

简而言之:

  • 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'@'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 %>