Ruby on Rails 连接问题

28

我有一个Ruby on Rails项目,之前是在托管服务器上开发的,现在决定在本地windows机器上工作。为了开始工作,我想确保只需将旧项目中的模型放入新项目即可在控制台中查询它们。但这失败了。

编辑以反映更准确的问题: Rails建立用于查询我的模型的连接时,只能运行一个查询,然后对所有后续查询都会给出“未连接”的异常。有人知道怎么回事吗?我检查了很多次我的配置。如果mysql服务器上有我不知道的某些设置,我愿意查看它。

堆栈跟踪:

Price.find(1)
ActiveRecord::StatementInvalid: Mysql::Error: query: not connected: SHOW FIELDS FROM `prices`
        from c:/Program Files/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.3/lib/active_record/connection_adapters/abstract_adapter.rb:212:in `log'
        from c:/Program Files/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.3/lib/active_record/connection_adapters/mysql_adapter.rb:320:in `execute'
        from c:/Program Files/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.3/lib/active_record/connection_adapters/mysql_adapter.rb:466:in `columns'
        from c:/Program Files/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.3/lib/active_record/base.rb:1271:in `columns'
        from c:/Program Files/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.3/lib/active_record/base.rb:1279:in `columns_hash'
        from c:/Program Files/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.3/lib/active_record/base.rb:1578:in `find_one'
        from c:/Program Files/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.3/lib/active_record/base.rb:1569:in `find_from_ids'
        from c:/Program Files/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.3/lib/active_record/base.rb:616:in `find'
        from (irb):2

我已经确认我的MySQL数据库可以接受连接,并且具有我期望的数据和结构。 我已经仔细检查了我的连接等。 有人能够解释一下吗?


你是在生产环境、开发环境还是测试环境运行?如果你改变这个会发生什么? - marcgg
可以连接,但查询失败
require "mysql" => [] testconn = Mysql.real_connect("localhost", "lco_admin", "****", "lastcall_dev") => #Mysql:0x348d728 testconn.get_server_info => "5.1.37-community" testconn.host_info => "通过TCP/IP的本地主机" testconn.list_tables => ["bar_schedules", "bars", "bars_features", "drinks", "features", "prices", "recurrences", "special_schedules", "specials", "timespans"] testconn.query("select * from prices") Mysql::Error: 查询:未连接 from (irb):7:in `query' from (irb):7
- marr75
我遇到了和@marr75一样的问题。如果我解决了,我一定会在这里发布! - jonsidnell
我并没有在任何东西中“运行”。我正在使用控制台,在dev中运行,但我已更改了dev环境选项以匹配prod和test,并收到了相同的错误,只是为了排除这种问题。重新说明一下,这个应用程序在托管的Linux服务器上运行良好,我只是想让它在我的本地Windows机器上运行。我可以连接到本地mysql数据库并获取服务器信息、表列表等。我的查询只是失败了,并给出了堆栈跟踪。 - marr75
有更多的信息,我实际上可以连接,并且如果这是我所做的第一件事情,那么运行查询,之后,连接将不再连接。 - marr75
3个回答

82
我在aptana论坛上找到了解决这个问题的方法。
文章中提到,MySQL 5.1客户端库与Rails 2.2不兼容。他们提供的解决方案很简单:下载一个旧版的MySQL客户端库(libmySQL.dll)并将其复制到Ruby\bin文件夹中。
这对我有用(Windows XP,Ruby 1.8.6,Rails 2.3.3,mysql 5.1.33)。

2
非常感谢。令人失望的是,在许多mysql和ruby项目相互链接的地方,包括有关如何在Windows上使此堆栈工作的逐步指南中,都没有提到这一项。 - marr75
3
哇,太好了,我找到了这篇文章!现在运作得很好,感谢大家的提示! - Mark Kadlec
谢谢…我以为在将Linux主机迁移到本地Windows演示服务器时遇到了真正的麻烦。 - Eric Pugh
对我有用!但不要像我第一次那样,不小心并愚蠢地让Windows将其保存到Ruby/bin作为libmySQL(2).dll,那样是行不通的 ;) - carols10cents
曾在Ruby1.9.2/Rails3.0.5上工作 - Andrew Burns
显示剩余3条评论

3

检查是否有最新的mysql gem(适用于rails> 2.1.2)

验证您的config/database.yml文件(adapter、passwords)。检查是否已正确设置所有环境(dev、prod test)

确认您的mysql正在运行


我已经多次检查了宝石(gem),实际上检查了我所有的宝石。我知道数据库配置是正确的,因为如果我故意破坏它,我将无法获取有关我的配置的信息(一个或多个服务器信息查询失败)。出于同样的原因,我知道它可以与Mysql通信,并且mysql正在运行(如果我停用服务,我将无法从欢迎页面看到有关我的配置的信息)。 - marr75

1

下载一个旧版的MySQL客户端库


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