【问题标题】:Rails - Mina - not able to load environment variables in database.yml fileRails - Mina - 无法在 database.yml 文件中加载环境变量
【发布时间】:2015-03-28 17:05:05
【问题描述】:

Mina 无法加载 database.yml 文件中的环境变量,如下所述:

deploy.rb:

task :deploy => :environment do
  deploy do
    # Put things that will set up an empty directory into a fully set-up
    # instance of your project.
    invoke :'git:clone'
    invoke :'deploy:link_shared_paths'
    invoke :'bundle:install'
    invoke :'rails:db_migrate'
    queue! "#{rake} db:seed"
    invoke :'rails:assets_precompile'
    invoke :'deploy:cleanup'
  end
end

vim ~/.bash_profile :

export MYSQLUSERNAME=mysql_user_name
export MYSQLPASSWORD=mysql_password

database.yml:

production:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: my_db_name
  pool: 5
  username: <%= ENV['MYSQLUSERNAME'] %>
  password: <%= ENV['MYSQLPASSWORD'] %>

错误:

$ mina deploy
  .....
  .......
  -----> DB migrations unchanged; skipping DB migration
         $ RAILS_ENV="production" bundle exec rake db:seed
         rake aborted!
         Mysql2::Error: Access denied for user 'root'@'localhost' (using password: NO)
               /home/user_name/.rvm/gems/ruby-2.0.0-p247/gems/mysql2-0.3.16/lib/mysql2/client.rb:70:in `connect'

注意:如果我替换用户名(mysql_user_name)和密码(mysql_user_name)值而不是 和 在 database.yml 文件中,它运行良好。

谁能帮助我在使用 Mina 部署时如何在 *.yml 文件中加载 ENV 变量。

谢谢!

【问题讨论】:

  • 您要部署到的目标机器上是否有这些环境变量?部署时,它很可能只是将 database.yml 文件复制到服务器,然后尝试启动应用程序。在这种情况下,环境变量需要在远程服务器上可用于该 bash 会话。
  • @Frost 是的,我在目标机器上有这些环境变量。问题是在部署项目本身时会引发错误。
  • 这里有更新吗?
  • 哦,在github上看到一个问题。您想在这里发布答案吗?

标签: ruby-on-rails ruby ruby-on-rails-4 mina


【解决方案1】:

也许晚了,但这可能对其他用户有所帮助。

对于部署,我使用Figaro gem,它允许在一个 YML 文件中配置一组环境变量。这些变量的使用方式相同。

例如:

YML:

MY_ENVIRONMENT_VARIABLE: 'Hi there!'

应用程序 Ruby 文件:

<%= ENV['MY_ENVIRONMENT_VARIABLE'] %>

优点是您可以使用 SCP 命令简单地将文件复制到服务器(假设您使用 *nix 系统),更好的是您可以创建一个 Mina 任务来执行此操作。

【讨论】:

    【解决方案2】:

    您需要将您的 ENV 放入 .bashrc 文件中。 .bash_profile 未加载,因为 mina 使用的是非交互式 shell。

    在这里播种:https://stackoverflow.com/a/216204/1339894

    【讨论】:

    • 我将我的 ENV 变量放在 .bashrc 文件中。还是一样的错误。
    • 您在服务器上使用 bash 作为默认 shell 吗?我在我的测试服务器上尝试了完全相同的设置,一切都通过了......
    • 是的,我使用 bash 作为默认 shell。 echo $0 结果 -bash
    • 我也有同样的问题,你解决了吗?
    猜你喜欢
    • 2012-01-30
    • 2016-08-25
    • 2015-07-09
    • 1970-01-01
    • 2015-03-29
    • 1970-01-01
    • 2012-12-29
    • 2021-01-19
    • 2021-11-08
    相关资源
    最近更新 更多