当作为非root用户运行时,Rails 4 / Unicorn app无法连接到MySQL

时间:2015-06-10 23:59:40

标签: mysql ruby-on-rails nginx unicorn digital-ocean

我在数字海洋上托管了一个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处理文件

0 个答案:

没有答案