Проблема с Rails 3 и MySQL, связанная с зависимостью JSON в ActiveSupport - PullRequest
6 голосов
/ 03 июня 2011

Я создал приложение Rails 3 с использованием sqlite и теперь пытаюсь перейти на MySQL.

Я создал новую базу данных MySQL, соответственно изменил database.yml и добавил в свой gemfile более старую версию gem mysql2 (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, но я понятия не имею, как это решить. Спасибо.

Ответы [ 2 ]

1 голос
/ 05 июня 2011

Проблемы, с которыми вы сталкиваетесь, могут быть связаны с тремя причинами:

  • Версия Ruby, которую вы используете
  • Использование гема SystemTimer с Ruby 1.9
  • Драгоценный камень JSON

Я подробно остановился ниже ...

Первое, что я бы предложил, - обновить вашу версию Ruby 1.9.Последняя стабильная версия:

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

Я настоятельно рекомендую использовать Ruby Version Manager (RVM) для установки и управления Ruby.

С точки зрения использования гема JSONПосмотрите: http://ruby.about.com/od/tasks/a/The-Json-Gem.htm

Цитата:

На Ruby 1.8.7 вам нужно установить гем.Однако в Ruby 1.9.2 гем json связан с основным дистрибутивом Ruby.Итак, если вы используете 1.9.2, вы, вероятно, все готово.Если вы используете 1.8.7, вам нужно установить гем.

Прежде чем устанавливать гем JSON, сначала поймите, что этот камень поставляется в двух вариантах.Просто установив этот гем с помощью gem install, json установит вариант расширения C.Это требует компилятора C для установки, и может быть недоступно или не подходит для всех систем.Хотя, если вы можете установить эту версию, вам следует.

Если вы не можете установить версию расширения C, вам следует вместо этого установить gems install json_pure.Это та же самая жемчужина, реализованная в чистом Ruby.Он должен работать везде, где работает код Ruby, на всех платформах и на разных интерпретаторах.Однако он значительно медленнее, чем версия с расширением C.

Edit :

Похоже, вам следует избегать использования драгоценного камня SystemTimer сРубин 1.9.См. Это для получения дополнительной информации: http://isitruby19.com/systemtimer

Чтобы процитировать комментарий, сделанный Филиппом на этой странице:

Я (со) автор этой жемчужины.Краткая история: Использование этого драгоценного камня в Ruby 1.9 бесполезно и не имеет никакого смысла!

Системный таймер пытается обойти некоторое ограничение модели «зеленой нити», используемой в Ruby 1.8 (MRI).См. http://ph7spot.com/musings/system-timer для получения более подробной информации.

В этом случае не имеет значения в Ruby 1.9 , который отказался от модели зеленых потоков и принял нативные потоки (вроде как все еще существует глобальныйзамок переводчика).

ура, - Филипп

1 голос
/ 05 июня 2011

Ваш gem pristine --all выглядит так, как будто он ошибся с драгоценным камнем SystemTimer, прежде чем он получил драгоценный камень json.Этот драгоценный камень используется в рассматриваемом приложении Rails?

Используете ли вы RVM?Если это так, я бы вручную удалил гемы SystemTimer и json и их двоичные файлы (если есть) из ~/.rvm/gems/ruby-whatever-version/ (в подкаталогах gem и bin).

Попробуйте обновитьк последней версии гема JSON (1.5.1), добавив его в свой Gemfile:

gem "json", "1.5.1"

и затем запустите bundle install для установки SystemTimer и более поздней версии json драгоценный камень.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...