Я вызываю внешний скрипт из 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 также решит эту проблему.