Rails应用程序在开发与生产方面表现不同

时间:2014-03-19 13:05:19

标签: ruby ruby-on-rails-4

有人可以了解一下为什么应用程序在生产与开发模式下的表现不同。我已检查并重新检查config/database.yml并确保用户名和密码正确无误。事实上,在撰写本文时,我已将开发和生产数据库设置为相同。然而,当我在生产环境中运行服务器时,Mysql2抱怨访问被拒绝,但在开发环境中工作正常。

运行rails c production vs rails c development时发生同样的事情,开发时没有错误,但生产中的Mysql2访问被拒绝。

制作模式

$ rails s -e production
=> Booting WEBrick
=> Rails 4.0.2 application starting in production on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
[2014-03-19 18:20:22] INFO  WEBrick 1.3.1
[2014-03-19 18:20:22] INFO  ruby 2.1.0 (2013-12-25) [x86_64-freebsd10.0]
[2014-03-19 18:20:22] INFO  WEBrick::HTTPServer#start: pid=10800 port=3000
I, [2014-03-19T18:20:30.569167 #10800]  INFO -- : Started GET "/" for 192.168.1.102 at 2014-03-19 18:20:30 +0200
F, [2014-03-19T18:20:30.709229 #10800] FATAL -- :
Mysql2::Error (Access denied for user 'root'@'localhost' (using password: YES)):

开发模式

$ rails s -e development
=> Booting WEBrick
=> Rails 4.0.2 application starting in development on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
[2014-03-19 18:22:53] INFO  WEBrick 1.3.1
[2014-03-19 18:22:53] INFO  ruby 2.1.0 (2013-12-25) [x86_64-freebsd10.0]
[2014-03-19 18:22:53] INFO  WEBrick::HTTPServer#start: pid=10898 port=3000    

Started GET "/" for 192.168.1.102 at 2014-03-19 18:23:03 +0200
Processing by Rails::WelcomeController#index as HTML
  Rendered /home/user/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/railties-4.0.2/lib/rails/templates/rails/welcome/index.html.erb (2.3ms)
Completed 200 OK in 24ms (Views: 11.6ms | ActiveRecord: 0.0ms)

这是我的config / database.yml。

development:
  adapter: mysql2
  encoding: utf8
  database: amo
  pool: 5
  username: root
  password: mypass
  host: localhost

production:
  adapter: mysql2
  encoding: utf8
  database: amo
  pool: 5
  username: root
  password: mypass
  host: localhost

O / S:FreeBSD 10.0 64bit

Ruby:2.1.0(使用Rbenv安装)

Rails:4.0.2

1 个答案:

答案 0 :(得分:0)

常见问题是数据库用户权限设置为%以引用本地访问权限....

...但是在数据库环境中,数据库和Web服务器位于不同的计算机上,您需要将用户权限设置为来自Web服务器计算机的IP,DNS等。

例如,你可能有这样的权利:

grant all privileges on mydb.* to myuser@'%' identified by 'mypasswd';
grant all privileges on mydb.* to myuser@localhost identified by 'mypasswd';

但这只适用于您当地的开发环境。您可能已经编写了此类权限设置,在这种情况下,您需要为prod DB设置不同的设置权限。

在prod环境中,您可以在168.0.1.2上使用您的网络服务,在168.0.1.100上使用您的数据库。所以你的prod DB需要:

grant all privileges on mydb.* to myuser@168.0.1.2 identified by 'mypasswd';

如果您添加其他网络服务器,请记住为来自该计算机的用户添加权限。

如果没有响铃,请发布您的GRANTS(更改私人信息)。如果你不熟悉,我会挖出执行此操作的命令。