Ruby on Rails Rake 错误

6

编辑:问题已解决,感谢这篇论坛帖子:http://forums.aptana.com/viewtopic.php?f=20&t=7563&p=27407&hilit=libmysql.dll#p27407。谢谢大家!

我开始学习 RoR 并尝试使用 rake db:migrate,但一直遇到同样的错误。我可以使用 C:\dev\railslist>mysql -u root railslist_development -p 连接到 MySQL 数据库。 rake db:migrate --trace 会产生以下结果:

C:\dev\railslist>rake db:migrate --trace
(in C:/dev/railslist)
** Invoke db:migrate (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute db:migrate
rake aborted!
Mysql::Error: query: not connected: CREATE TABLE 'schema_migrations' ('version'
varchar(255) NOT NULL) ENGINE=InnoDB
C:/Ruby19/lib/ruby/gems/1.9.1/gems/activerecord-2.3.5/lib/active_record/connecti
on_adapters/abstract_adapter.rb:219:in 'rescue in log'
C:/Ruby19/lib/ruby/gems/1.9.1/gems/activerecord-2.3.5/lib/active_record/connecti
on_adapters/abstract_adapter.rb:202:in 'log'
C:/Ruby19/lib/ruby/gems/1.9.1/gems/activerecord-2.3.5/lib/active_record/connecti
on_adapters/mysql_adapter.rb:323:in 'execute'
C:/Ruby19/lib/ruby/gems/1.9.1/gems/activerecord-2.3.5/lib/active_record/connecti
on_adapters/abstract/schema_statements.rb:114:in 'create_table'
...

我的 database.yml 文件如下:

development:
  adapter: mysql
  database: railslist_development
  username: root
  password: **********
  host: localhost

  ...

编辑: 对不起,我搞混了... 我可以使用mysql connect localhost连接到MySQL数据库 - 它会生成一长串命令和变量。同时,如果我输入mysql -h localhost -u root -p,我也可以登录到MySQL提示符中。所以要澄清一下:我可以通过命令行连接到MySQL数据库,但是在RoR Rake中会出现错误。


你的 database.yml 文件包含什么? - Mick
4个回答

3

嗨,感谢您的帮助,您说得对,那确实是我的问题。不过,我已经解决了它,正如您可以在我的问题顶部看到的那样。 - blue_rubber_ducky
这对我有用。另外,请确保您的database.yml文件针对本地主机具有正确的设置。 - hohner
至少要给这个人以信用或参考。 - d1e

2

数据库未被创建。

当使用MySql时,在运行rake db:migrate之前,您应该执行以下操作来创建数据库:

rake db:create

或者通过SQL命令手动创建数据库。

mysql -h localhost -u root -p
> CREATE DATABASE railslist_development;

希望这能帮到你。


嗯...调用rake db:create返回一个"数据库已经存在"的错误(我之前使用SQL命令创建过它),所以我删除了数据库然后再试一次。成功了!我用MySQL检查了一下,数据库已经创建好了 - 但是当我调用rake db:migrate时还是得到同样的错误。 当我调用rake db:create时,我还收到了一个奇怪的错误信息: `C:\dev\railslist>rake db:create (in C:/dev/railslist)<main>: [BUG] Segmentation fault ruby 1.9.1p243 (2009-07-16 revision 24175) [i386-mingw32] -- control frame ---------- c:0001 p:0000 s:0002 b:0002 l:00269c d:00269c TOP ` - blue_rubber_ducky
你认为我遇到的是 Ruby 的漏洞 / 问题,还是我还没有设置好一些东西?看起来 Ruby 可以与 MySQL 通信(它创建了数据库,但是有错误),但在运行 rake db:migrate 时失败。 - blue_rubber_ducky

2

我并不是在直接回答你的问题,但既然你正在学习,为什么不暂时使用更简单的sqlite呢?


1

这几乎肯定是因为您的mysql实例未运行或者您没有配置config/database.yml指向正确的数据库环境(通常是开发环境)。以下是一些尝试的方法 -

  • 检查您的config/database.yml - 您的主机在哪里(如果没有列出主机,则会连接到localhost)
  • 尝试运行mysql -h localhost并 查看mysql是否正在运行。

编辑: 如果您无法连接到本地数据库,则问题出在那里,而不是Rails。确保它正在运行,并且您的权限设置正确,以允许从您的计算机进行连接。此外,尝试从本地计算机作为root用户连接,以查看是否存在更细粒度的问题(例如,您已启用本地连接,但未为Rails中使用的用户启用)。

编辑2: 在这种情况下,您的问题很可能是您的数据库尚未创建。只需转到命令行并键入以下内容:

mysql -u root -p -e 'create database railslist_development;'

这将创建数据库并允许您运行迁移。


谢谢,我已经发布了database.yml文件,你能看到那里有问题吗? - blue_rubber_ducky

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