Преобразование плагина Rails 2 в гем Rails 3 - PullRequest
1 голос
/ 01 октября 2010

Итак, есть замечательный плагин, который я привык использовать в моих проектах на Rails 2, называемый Bootstrapper.По сути, он дублирует функциональность файла seed.rb, но мне он нравится, потому что он позволяет разбить процесс начальной загрузки на краткие куски.

В любом случае, я зашел так далеко, что раскошелил проект и попыталсяпревратить его в драгоценный камень Rails 3.Я смог заставить драгоценный камень инициализировать и зарегистрировать грабли и генераторы.Однако я столкнулся с проблемой самого класса Bootstrapper.Он не будет загружаться в проект Rails, если он не находится в модуле.

То есть, если я помещаю класс Bootstrapper в отдельный файл и требую этот файл в моем Railtie, то в моем приложении Rails онне могу найти класс Bootstrapper.Если я помещу класс в модуль и вызову Bootstrapper :: Bootstrapper, то все будет замечательно.

Код, который на самом деле требует класс Bootstrapper, выглядит так:

ActiveSupport.on_load :active_record do
  require 'bootstrapper/bootstrapper'
end

Источник доступен здесь:http://github.com/jrmehle/bootstrapper/tree/make_gem

1 Ответ

0 голосов
/ 17 октября 2011

Пути автозагрузки на самом деле имеют раздражающую особенность следующих путей файловой системы. Например, в вашей библиотеке или дополнениях (в зависимости от того, что вы загружаете) у вас может быть следующая структура файла:

lib/bootstrapper/bootstrapper.rb
# in this case, Bootstrapper::Bootstrapper.class = Class in rails c
# ie: you don't get a NameError exception

Более конкретно,

lib/bootstrappers/bootstrapper.rb
# Bootstrapper::Bootstrapper => NameError
# Bootstrappers::Bootstrapper => works

Если вы действительно хотите другой путь, вы можете переместить все в ваш исходный файл lib / bootstrapper.rb, но мне не нравится это делать, это не так, как организованы гемы. В rails3 вы найдете автоматическую загрузку довольно приятной, если будете использовать модули повсеместно (что может быть болезненно).

Rails3 использует / extras вместо / lib, но это не обязательно, это просто значение по умолчанию (закомментированное) из rails new. Для переключения вы просто загружаете дополнения вместо lib.

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