Как решить устаревшие задачи rake в плагине rails?

Из-за концепции, представленной здесь,

Rails::Plugin — это не что иное, как Rails::Engine, но, поскольку он загружается слишком поздно в процессе загрузки, он не имеет таких возможностей настройки, как голый Rails::Engine.

В отличие от Rails::Railtie и Rails::Engine, вы не должны наследовать от Rails::Plugin. Rails::Plugin автоматически настраивается как движок, просто помещая его в файл vendor/plugins. Поскольку это делается автоматически, вы фактически не можете объявить Rails::Engine внутри вашего плагина, иначе это приведет к двойной загрузке одних и тех же файлов. Это означает, что если вы хотите отправить движок как гем, его нельзя использовать как плагин, и наоборот.

Помимо этого концептуального различия, единственная разница между Rails::Engine и Rails::Plugin заключается в том, что плагины автоматически загружают файл "init.rb" в корне плагина во время процесса загрузки.

Задачи rake в плагинах rails устарели, вместо них рекомендуется использовать lib/tasks. Как это решить? Могу ли я просто переместить задачи плагина в lib/tasks?


person Dida    schedule 18.05.2010    source источник


Ответы (2)


у меня была такая же проблема, я просто переместил все файлы vendor/plugin/*/tasks/*.rake в lib/tasks (пришлось создать этот каталог, потому что он не существовал)

затем rake rails:обновление прошло нормально

person vrsmn    schedule 28.05.2010
comment
Похоже, это работает. Однако мне все еще любопытно, какой должна быть замена этому поведению. т. е. как теперь плагины определяют новые задачи? - person Trejkaz; 07.07.2010
comment
они все в RAILS_ROOT/tasks/, поэтому просто их перемещение решает эту проблему, это то же самое, но в другом месте - person vrsmn; 14.07.2010
comment
Спасибо .. это сработало. Пожалуйста, отметьте ответ как принятый Dida - person Amal Kumar S; 31.05.2011
comment
Чтобы переместить все эти файлы одновременно из командной строки из корневого каталога вашего проекта, запустите mkdir lib/tasks, а затем mv vendor/plugins/*/tasks/*.rake lib/tasks. - person Rory O'Kane; 23.04.2012

Если вы разработчик плагина, вы просто переместите

my_cool_plugin/tasks

to

my_cool_plugin/lib/tasks
person jemminger    schedule 22.02.2011