Rails控制台无法连接到数据库。

27

最近我更新了我的OS X到Maverics。今天当我试图像这样创建一个新项目:

rails new abc

之前有很多问题,但我安装了Xcode现在它可以工作了。现在我可以像这样打开Rails控制台:

rails console

然后无论我写什么,我只能看到:

Loading development environment (Rails 4.0.1)
1.9.3p448 :001 > Link
=> Link(no database connection)

出了什么问题?Mysql正在运行,数据库也存在。当我运行rake db:migrate时,一切都正常。


你确定你的 database.yml 文件在开发环境下是正确的吗? - amit karsale
是的,我确定,否则 rake db:migrate 将无法工作。 - Wordica
我在将我的应用程序升级到Rails 4后遇到了相同的问题。 http://stackoverflow.com/questions/19940307/issue-abouot-populate-in-rails4 - Joey Hu
5个回答

60

控制台可能已经有数据库连接,但是报告说没有。

为了确定是否真的如此,在控制台中进行查询。

Link.count

这对我和同事来说解决了误报警告的问题。


一样的情况。肯定是个bug。 - karlingen
1
@JosephJaber的评论让我觉得这不是一个bug。 - pdoherty926
Rails 4.1 中的消息已经更加清晰明了。请参见下面 @juanitofatas 的回答。 - barelyknown
它可以修复误报问题,但只在控制台仍然打开时有效。一旦您退出并重新进入,问题会再次发生。请参考Joseph Jaber的答案进行修复。 - Benjamin Dunphy

29

过去,在加载控制台后立即引用ActiveRecord模型会返回其列信息。现在,只有在明确强制其连接到数据库的方法(如connectionfirstallcount等)才会返回此信息。

您可以通过将以下内容添加到config/application.rb中来恢复以前的行为:

console do
  ActiveRecord::Base.connection
end

19
根据 rails/rails 上的 问题#12804

该消息只是告诉您 AR 尚未连接到数据库,因此不知道列信息。 我认为除非我们需要获取数据,否则不连接到数据库是期望的。

现在,您可以使用 Model.connection 来建立连接。


1
谢谢解释。不过这是一种非常糟糕的措辞和行为选择。 - Chris Nicola
这就是解决方案,它修复了问题! - Daniel Morris

4

尝试在控制台上使用 reload! 命令,并确保您的指定模型中有记录,如果没有,请为关系创建记录等。

我在 Ubuntu 上也遇到了同样的问题。我在 Rails 控制台中使用了 reload! 命令,并在数据库中添加了记录。


3
我在使用Rails 4.0.1时遇到了同样的问题。这个问题发生在我部署到的Linux服务器以及我的Mavericks开发机上。
服务器工作正常,测试也正常,但控制台没有数据库连接。
回滚到Rails 4.0.0可以解决控制台的问题。
我没有找到任何关于这个问题的其他提及。可能是与4.0.1的更改和Postgres适配器有关吗?(你在使用Postgres吗?)

不,我正在使用在Vagrant虚拟机上运行的Ubuntu上的MySQL。 - Koray Güclü

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