6

我使用 sqlite 构建了我的 Rails 3 应用程序,现在我正在尝试切换到 MySQL。

我创建了一个新的 MySQL 数据库,相应地更改了 database.yml,并将旧版本的 mysql2 gem 添加到我的 gemfile ( gem 'mysql2', '< 0.3') 中,它应该与 Rails 3 一起玩得更好

我可以很好地启动开发服务器。当我访问一个页面时,我得到一个Mysql2::Error( Table 'twitter_quiz_development.users' doesn't exist)。这很好——我仍然需要将模式添加到新的数据库中。这是我遇到麻烦的地方:

rake db:schema:load返回这个讨厌的错误

在这里找到的解决方案对我不起作用。gem pristine --all返回这个

如果有帮助,我正在运行 Ubuntu 11。

似乎该错误与 JSON 有关,但我不知道如何解决这个问题。谢谢。

4

2 回答 2

1

gem pristine --all看起来像是在到达SystemTimer宝石之前与宝石出错了json。有问题的 Rails 应用程序中使用了该宝石吗?

你在使用 RVM 吗?如果是这样,我会从(在和子目录中)手动删除SystemTimerjson宝石及其二进制文件(如果有)。~/.rvm/gems/ruby-whatever-version/gembin

JSON尝试通过将其添加到您的 Gemfile来更新到最新版本的gem (1.5.1):

gem "json", "1.5.1"

然后运行bundle install安装SystemTimer和更新版本的jsongem。

于 2011-06-05T09:14:07.043 回答
1

您遇到的问题可能是由于 3 件事:

  • 您正在使用的 Ruby 版本
  • 在 Ruby 1.9 中使用 SystemTimer gem
  • JSON 宝石

我在下面详细说明...

我建议的第一件事是升级您的 Ruby 1.9 版本。最新的稳定版是:

ruby 1.9.2p180 (2011-02-18 revision 30909)

我强烈推荐使用Ruby 版本管理器 (RVM)来安装和管理 Ruby。

在使用 JSON gem 方面,请查看: http ://ruby.about.com/od/tasks/a/The-Json-Gem.htm

去引用:

在 Ruby 1.8.7 上,您需要安装一个 gem。但是,在 Ruby 1.9.2 中,json gem 与核心 Ruby 发行版捆绑在一起。因此,如果您使用的是 1.9.2,那么您可能已经准备就绪。如果您使用的是 1.8.7,则需要安装 gem。

在安装 JSON gem 之前,首先要意识到这个 gem 分布在两个变体中。只需使用 gem install json 安装此 gem,即可安装 C 扩展变体。这需要安装 C 编译器,并且可能不适用于所有系统。虽然如果你可以安装这个版本,你应该。

如果你不能安装 C 扩展版本,你应该 gem install json_pure 代替。这是在纯 Ruby 中实现的同一个 gem。它应该在 Ruby 代码运行的任何地方、所有平台和各种解释器上运行。但是,它比 C 扩展版本慢得多。

编辑

看起来您应该避免在Ruby 1.9 中使用SystemTimer gem。有关更多信息,请参见:http: //isitruby19.com/systemtimer

引用菲利普在该页面上发表的评论:

我是这颗宝石的(共同)作者。短篇小说:在 Ruby 1.9 中使用这个 gem 是没用的,没有任何意义!

System Timer 正在尝试解决 Ruby 1.8 (MRI) 中使用的“绿色线程”模型的一些限制。有关详细信息,请参阅http://ph7spot.com/musings/system-timer 。

然后它在 Ruby 1.9 中是无关紧要的,它放弃了绿色线程模型并接受了本机线程(有点因为仍然有一个全局解释器锁)。

干杯,-菲利普

于 2011-06-05T12:27:26.090 回答