在生产模式下出现“Access denied for user 'root'@'localhost' (using password: NO)”错误,且没有任何错误被记录。

4

我部署了我的Rails应用程序,所有页面都出现500错误。 我的production.log没有显示任何内容(这是一个问题),但我尝试运行一个简单查询(User.find:first)并出现以下错误:

Access denied for user 'root'@'localhost' (using password: NO)

我的database.yml文件中肯定有一个密码,而且是正确的。

因此,没有任何错误记录到我的production.log文件中,这让我想知道问题出在哪里。

您有任何想法在哪里开始查找或者问题可能是什么吗?

另外,值得一提的是,我正在Apache上运行Passenger。

更新:以下是我的database.yml文件内容

development:
  adapter: mysql
  encoding: utf8
  database: website_development
  username: root
  password: secretz
  socket: /tmp/mysql.sock

test:
  adapter: mysql
  encoding: utf8
  database: website_test
  username: root
  password: secretz
  socket: /tmp/mysql.sock

production:
  adapter: mysql
  encoding: utf8
  database: website_production
  username: ttp_mysql
  password: secretz
  socket: /var/run/mysqld/mysqld.sock
最新更新: 我更改了mysql用户,使其不再以root身份运行,但现在我仍然得到了“拒绝访问'root'@'localhost'”的错误提示……尽管在生产模式下它根本不应该以“root”身份运行。

现在真的非常困惑。


我删除了我的回答,但我要重申我的初始问题:您为什么要以 root 身份登录数据库,而不是为您的应用程序创建一个更受限制的用户? - Jed Smith
可能应该改一下。在我的应用程序再次正常工作后会研究一下。 :) - Shpigford
你很可能正在使用一个配置文件并更改另一个。尝试找出使用的配置文件是哪个。 - Pekka
嗯...我不知道数据库有多个配置文件,也不知道如何更改到另一个配置文件来使用。 - Shpigford
4个回答

5

我找到了问题所在。我将一些文件添加到我的/models文件夹中,以便从旧数据库进行一些数据库迁移。

在这些文件中,我使用了"ActiveRecord :: Base.establish_connection"来连接数据库,并且不知何故,它们覆盖了database.yml文件中的内容(即使我没有直接调用这些文件)。

无论如何...删除这些文件解决了问题。

感谢您花时间尝试解决这个问题!


4

它试图使用root账户,再加上你在production.log文件中没有看到任何内容,似乎表明应用程序未在生产模式下运行。

要轻松检查这一点,尝试在environment.rb文件中添加以下行(靠近顶部),重新启动应用程序,看看是否仍然出现相同的错误:

ENV["RAILS_ENV"] = "production" 

注意: 出于明显的原因,这不是一个好的实践方法,所以即使它可以工作,我建议找出根本原因并从文件中删除此行。但是,既然您在生产服务器上遇到问题,我希望这个答案至少能让您继续运行,同时继续诊断为什么它在第一次生产模式下没有运行。


所以我现在正在做这个...但实际上它看起来仍在尝试使用我的“开发”数据库。有没有一种方法可以验证从database.yml文件中使用了哪组数据? - Shpigford

2
我遇到了同样的问题并意识到我没有重新启动rails服务器。尝试重新启动一下吧。

1
我也遇到了同样的问题。我关闭了所有终端并重新启动了服务器。现在它运行得很好!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接