ruby-on-rails plugins warnings ruby-on-rails-3.2

ruby on rails - Cómo tratar con el proveedor/complementos después de actualizar a los rieles 3.2.1



ruby-on-rails plugins (4)

Acabo de escribir una publicación de blog sobre esto: Cómo convertir Simple Rails 2.3 Complementos de estilo para Rails 3.2

Después de actualizar a rails3.2.1, aparece esta advertencia:

¡Tienes complementos de Rails 2.3 en proveedores / complementos! El soporte para estos complementos se eliminará en Rails 4.0. Muévalos y agréguelos a su Gemfile, o dóblelos a su aplicación como lib / myplugin / * y config / initializers / myplugin.rb. Consulte las notas de la versión para obtener más información al respecto: http://weblog.rubyonrails.org/2012/1/4/rails-3-2-0-rc2-has-been-released

Muevo mis complementos en el directorio de proveedores / complementos pero no sé cómo escribir el archivo config / initializers / myplugin.rb, y google no puede encontrar la respuesta.


Acabo de revisar esto y descubrí que solo tienes que revisar cada complemento para verificar algunas cosas:

  • ¿Es una joya en rubygems? Si es así, solo péguelo en su Gemfile y elimínelo del vendor/plugins
  • Si no hay gema disponible, o la gema es antigua, tome la carpeta en el vendor/plugins y lib/plugins a lib/plugins

Una cosa con la que me encontré es que debes necesitar todos esos complementos manualmente. Aquí está el inicializador que creé y coloqué en 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

También tuve el problema de los inicializadores que necesitaba para algunos de los complementos, así que moví esos inicializadores particulares a la carpeta lib/plugins/initializers . my_plugin ponerles el nombre del complemento, por lo que un inicializador para el complemento my_plugin debería estar en el archivo lib/plugins/initializers/my_plugin.rb

¡Espero que esto ayude!


Nadie ha mencionado la conversión a Railtie o Rails :: Engine.

Simplemente mueva todos sus archivos ruby ​​en una gema [use la gema del paquete para crearla para una fricción mínima].

Luego eche un vistazo a los documentos de Railtie [y encuentre su versión de Rails objetivo]:

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

Es bastante fácil convertir un antiguo plugin init.rb a un rabilie de esta manera, y te da un camino hacia Rails 4+.

¿Tiene vistas o controladores ?, luego use Rails :: Engine en su lugar. Si bien los motores en gemas pueden ser complicados desde el punto de vista del flujo de trabajo, la conversión de un complemento a uno es bastante trivial.

Hazte un favor y comienza a construir pruebas directamente en la gema, en lugar de en el proyecto de Rails.


las otras dos respuestas son buenas y parecen funcionar.

Sin embargo, si su complemento consiste en un único archivo .rb en proveedor / plugins / ... / lib y el proveedor / plugins / ... / init.rb es solo un

require ''pluginname''

Luego puede simplemente copiar el archivo individual en su directorio lib y agregar un archivo a config / initializers que requiera ''yourpluginname''

Aquí hay un ejemplo concreto que utiliza el plugin acts_as_rated, que todavía no es una joya.

  1. copie el proveedor / plugins / acts_as_rated / lib / acts_as_rated.rb a lib /
  2. crea un archivo config / initializers / acts_as_rated.rb con lo siguiente ...

    requiere ''acts_as_rated''

  3. eliminar proveedor / plugins / acts_as_rated