使用capistrano,nginx,puma将rails app部署到DigitalOcean

时间:2016-11-02 20:47:39

标签: ruby-on-rails nginx capistrano digital-ocean puma

我目前正在关注如何使用capistrano部署到生产的DigitalOcean页面上的教程。我已经到了尝试运行迁移的步骤,但是它发出了这个错误:

SSHKit::Runner::ExecuteError: Exception while executing on host 104.236.51.1: rake exit status: 1 rake stdout: rake aborted! Mysql2::Error: Access denied for user 'foo'@'localhost' (using password: NO)

查看日志我可以看到它尝试执行的命令,如下所示: /home/foo/apps/programming_class_judge/releases/20161102041809 && ( export RAILS_ENV="production" ; ~/.rvm/bin/rvm default do bundle exec rake db:migrate )

如果我进入机器并运行此命令,它可以工作。我不明白为什么在使用capistrano部署时没有使用密码。

以下是我的db.yaml文件的prod设置(JUDGE_PRODUCTION_DB_PASSWORD环境变量在我的本地和远程机器中): default: &default adapter: mysql2 encoding: utf8 pool: 5 username: root password: <= ENV['JUDGE_DB_PASSWORD'] %> socket: /tmp/mysql.sock production: <<: *default database: judge_production username: foo password: <%= ENV['JUDGE_PRODUCTION_DB_PASSWORD'] %> socket: /var/run/mysqld/mysqld.sock 我的config / deploy.rb脚本基本上是本教程中可以找到的内容的复制粘贴,用红色代替文本:https://www.digitalocean.com/community/tutorials/deploying-a-rails-app-on-ubuntu-14-04-with-capistrano-nginx-and-puma

当我执行cap production deploy:initial时,任何人都知道为什么迁移可能会失败,而不是在我手动尝试时失败?

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

在/ etc / environment中添加环境变量。添加到.bashrc,.bashprofile,.profile会将它们添加为shell变量而不是环境,而capistrano并不会真正创建新的shell。

还有一套:default_env,{&#39; var&#39; =&GT; &#39; VAL&#39; capistrano的选项。

有关详细信息,请参阅此答案:Capistrano and environment variables