Подтвердить что ты не робот

Как работать с поставщиками/плагинами после обновления до рельсов 3.2.1

После обновления до rails3.2.1 это предупреждение происходит:

У вас есть плагины с поддержкой Rails 2.3 в поставщиках/плагинах! Поддержка этих плагинов будет удалена в Rails 4.0. Выдвиньте их и соедините их в своем Gemfile или добавьте их в свое приложение как lib/myplugin/* и config/initializers/myplugin.rb. Подробнее см. Примечания к выпуску: http://weblog.rubyonrails.org/2012/1/4/rails-3-2-0-rc2-has-been-released

Я перемещаю свои плагины в каталог vendor/plugins, но я не знаю, как писать файл config/initializers/myplugin.rb, и Google не может найти ответ.

4b9b3361

Ответ 2

Я только что прошел через это и обнаружил, что вам просто нужно пройти через каждый плагин, чтобы проверить несколько вещей:

  • Это драгоценный камень на рубигемах? Если это так, просто вставьте его в свой Gemfile и удалите из vendor/plugins
  • Если ни один камень не доступен, или камень старый, возьмите папку в vendor/plugins и переместите ее в lib/plugins

Одна вещь, с которой я столкнулся, - это то, что вам нужно будет вручную использовать все эти плагины. Вот инициализатор, который я создал и разместил в config/initializers/plugins.rb:

Dir[Rails.root.join('lib', 'plugins', '*')].each do |plugin|
  next if File.basename(plugin) == 'initializers'

  lib = File.join(plugin, 'lib')
  $LOAD_PATH.unshift lib

  begin
    require File.join(plugin, 'init.rb')
  rescue LoadError
    begin
      require File.join(lib, File.basename(plugin) + '.rb')
    rescue LoadError
      require File.join(lib, File.basename(plugin).underscore + '.rb')
    end
  end

  initializer = File.join(File.dirname(plugin), 'initializers', File.basename(plugin) + '.rb')
  require initializer if File.exists?(initializer)
end

У меня также возникла проблема инициализаторов, которые мне нужны для некоторых плагинов, поэтому я переместил эти определенные инициализаторы в папку lib/plugins/initializers. Вы должны назвать их именем плагина, поэтому инициализатор для плагина my_plugin должен быть в файле lib/plugins/initializers/my_plugin.rb

Надеюсь, это поможет!

Ответ 3

оба других ответа хороши и, похоже, работают.

Однако, если ваш плагин состоит из одного файла .rb в разделе vendor/plugins/.../lib, а поставщик/плагины/.../init.rb - это просто

require 'pluginname'

Затем вы можете просто скопировать один файл в ваш каталог lib и добавить файл в config/initializers, который требует "yourpluginname"

Вот конкретный пример использования плагина act_as_rated, который еще не является драгоценным камнем.

  • копировать поставщика/плагины/act_as_rated/lib/actions_as_rated.rb в lib/
  • создайте файл config/initializers/actions_as_rated.rb со следующим...

    требуется "act_as_rated"

  • удалить поставщика/плагины/act_as_rated

Ответ 4

Никто не упомянул о конвертации в Railthie или Rails:: Engine.

Просто переместите все ваши рубиновые файлы в драгоценный камень [используйте жгут для сборки, чтобы создать его для минимального трения].

Затем взгляните на документы Railtie [и найдите свою целевую версию Rails]:

https://apidock.com/rails/v3.2.13/Rails/Railtie

Очень легко просто преобразовать старый плагин init.rb в railtie таким образом, и он дает вам путь к Rails 4 +.

Получите просмотры или контроллеры?, а затем используйте Rails:: Engine. Хотя двигатели в драгоценных камнях могут быть сложными с точки зрения рабочего процесса, преобразование плагина в один из них довольно тривиально.

Сделайте себе одолжение и начните строить тесты прямо в драгоценном камне, а не в проекте Rails.