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
ylib/plugins
alib/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.
- copie el proveedor / plugins / acts_as_rated / lib / acts_as_rated.rb a lib /
crea un archivo config / initializers / acts_as_rated.rb con lo siguiente ...
requiere ''acts_as_rated''
eliminar proveedor / plugins / acts_as_rated