我在数字海洋上托管了一个VPS,我正在运行一个带有nginx + unicorn设置的简单Rails应用程序。
我最初将项目克隆到根主目录并以root用户身份运行,以便进行快速而肮脏的设置。
最近我创建了一个更专注的用户并使用capistrano将应用部署到/var/www/my_app/current
。
我正在使用命令
启动应用程序SECRET_KEY_BASE="6969..." RAILS_ENV="production" bundle exec unicorn -c config/unicorn.rb -D
我已经重新指出nginx文件从新的独角兽套接字位置(在/var/www/current/tmp/sockets/unicorn.sock
下)读取并且使用相同的上述确切命令来启动独角兽。但是,当作为任何非root
用户运行时,它似乎无法连接到mysql
日志/ unicorn.log
I, [2015-06-10T23:43:39.531175 #18610] INFO -- : Refreshing Gem list
I, [2015-06-10T23:43:41.765092 #18610] INFO -- : unlinking existing socket=/var/www/my_app/releases/20150610234033/tmp/sockets/unicorn.sock
I, [2015-06-10T23:43:41.765431 #18610] INFO -- : listening on addr=/var/www/my_app/releases/20150610234033/tmp/sockets/unicorn.sock fd=12
E, [2015-06-10T23:43:41.767981 #18610] ERROR -- : Access denied for user 'my_app'@'localhost' (using password: YES) (Mysql2::Error)
/var/www/my_app/shared/bundle/ruby/2.0.0/gems/mysql2-0.3.18/lib/mysql2/client.rb:70:in `connect'
/var/www/my_app/shared/bundle/ruby/2.0.0/gems/mysql2-0.3.18/lib/mysql2/client.rb:70:in `initialize'
/var/www/my_app/shared/bundle/ruby/2.0.0/gems/activerecord-4.2.1/lib/active_record/connection_adapters/mysql2_adapter.rb:18:in `new'
/var/www/my_app/shared/bundle/ruby/2.0.0/gems/activerecord-4.2.1/lib/active_record/connection_adapters/mysql2_adapter.rb:18:in `mysql2_connection'
另一篇文章建议它可能与为连接指定mysql套接字有关,所以我在我的database.yml
添加了一行,告诉它在哪里找到mysql套接字
配置/ database.yml的
...
username: 'my_app'
password: 'some-password'
socket: '/var/run/mysqld/mysqld.sock'
没有运气......
我很肯定用户设置了与数据库的连接,因为我可以使用rails server
启动应用,因此它显然与unicorn
相关。
有什么想法?谢谢!
更新
我进一步指出了这个问题。我在database.yml
中使用shell / environment变量来读取mysql的用户名/密码。当我用硬编码的字符串替换它们时,它工作正常。看来问题是unicorn
读取shell变量和/或通过erb
处理文件