Rails - Mina - 无法在database.yml文件中加载环境变量

时间:2015-01-29 12:53:13

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

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)而不是&lt;%= ENV [&#39; MYSQLUSERNAME&#39;]%&gt;和&lt;%= ENV [&#39; MYSQLPASSWORD&#39;]%&gt;在database.yml文件中,它运行良好。

任何人都可以帮助我,在使用Mina进行部署时如何在* .yml文件中加载ENV变量。

谢谢!

2 个答案:

答案 0 :(得分:2)

也许迟到了,但这可能有助于其他用户。

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

例如:

YML:

MY_ENVIRONMENT_VARIABLE: 'Hi there!'

应用程序Ruby文件:

<%= ENV['MY_ENVIRONMENT_VARIABLE'] %>

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

答案 1 :(得分:1)

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

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