Использование AR во внешнем скрипте работает, если только не вызвано system () из Rails - PullRequest
0 голосов
/ 26 июня 2011

Я вызываю внешний скрипт из rails с помощью system () и получаю следующее:

/home/user/.rvm/gems/ruby-1.9.2-p180/gems/activerecord-
3.0.7/lib/active_record/connection_adapters/mysql_adapter.rb:22:in
`rescue in mysql_connection': !!! Missing the mysql2 gem. Add it to
your Gemfile: gem 'mysql2' (RuntimeError)
...

Эта ошибка вызвана внешним скриптом, который загружает рубины и активную запись без рельсов. Скрипт по-прежнему работает из оболочки, если я укажу ту же версию, что использует mysql2 rails:

require 'rubygems'
gem 'mysql2', '0.2.7'
require 'active_record'
...#active record initialization
c = Class.new # Class uses rails models
c.run

Я также могу использовать класс, который скрипт использует в rails. Это означает, что я мог бы использовать rake для запуска скрипта после удаления инициализации active_record. Однако было бы неплохо узнать, что вызывает это в первую очередь.

Редактировать. Запуск сценария с bundle exec вызывает ту же ошибку, если я не раскомментирую требовать 'active_record' В этом случае у меня остаются NameErrors при вызове моделей.

Edit2. Исправлена ​​ошибка, из-за которой использовались «список драгоценных камней» и «список драгоценных камней bundle exec», а также удалялись версии драгоценных камней, более новые, чем версии комплектов. Запуск без bundle exec также все еще работает, чего я не ожидал. В Gemfile мне требовались рельсы 3.0.7, но были также установлены версии activerecord 3.1.0.beta1. Похоже, bundle exec игнорирует версию rails и загружает новейшую версию activerecord. Возможно, добавление gem 'activerecord', '3.0.7' во внешний скрипт или gemfile также решит эту проблему.

1 Ответ

0 голосов
/ 26 июня 2011

Поскольку вы используете RVM, возможно, вы работаете в другом Ruby, который не работает в том же контексте, что и ваш пакет. Убедитесь, что вы используете bundle exec для запуска этой команды.

...