【问题标题】:Problem with Rails 3 and MySQL related to JSON dependency in ActiveSupportRails 3 和 MySQL 与 ActiveSupport 中 JSON 依赖相关的问题
【发布时间】:2011-09-07 11:44:23
【问题描述】:

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

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

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

rake db:schema:load 返回this nasty error

找到here 的解决方案对我不起作用。 gem pristine --all返回this

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

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

【问题讨论】:

  • 你运行的是什么操作系统? 编辑: 抱歉,我注意到你已经提到了。
  • Jits 和 NFM,我会尽快实施您的建议。我真的很感激这个......这个杀了我!

标签: mysql json ruby-on-rails-3 mysql2


【解决方案1】:

您遇到的问题可能是由于 3 个原因造成的:

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

我已经在下面详细说明了......

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

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

我强烈建议使用 Ruby Version Manager (RVM) 来安装和管理 Rubies。

关于使用 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 中无关,它放弃了绿色线程模型并采用了本机线程(有点因为仍然存在全局解释器锁)。

干杯, - 菲利普

【讨论】:

    【解决方案2】:

    您的gem pristine --all 在到达json gem 之前似乎与SystemTimer gem 错误。有问题的 Rails 应用程序中是否使用了该 gem?

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

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

    gem "json", "1.5.1"
    

    然后运行bundle install 来安装SystemTimer 和更高版本的json gem。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多