2012-02-02 6 views
27

Después de actualizar a rails3.2.1, esta advertencia se produce:¿Cómo lidiar con el vendedor/plugins después de actualizar a los carriles 3.2.1

Tienes Rails 2.3 plugins de estilo de proveedores/plugins! 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. Ver las notas de la versión para obtener más información: http://weblog.rubyonrails.org/2012/1/4/rails-3-2-0-rc2-has-been-released

muevo los plugins en el directorio vendedor/plugins, pero no sé cómo escribir el archivo de configuración/inicializadores/myplugin.rb, y Google no puede encontrar la respuesta.

Respuesta

43

acabo escrito una entrada en el blog sobre esto: How to Convert Simple Rails 2.3 Style Plugins for Rails 3.2

+1

¡Muchas gracias por su publicación de blog! Acabo de convertir con éxito [gmail_smtp] (https://github.com/adamwiggins/gmail_smtp/) usando sus excelentes instrucciones. En caso de que ayude a alguien, cambié las dos líneas en el 'init.rb' original de' require 'smtp_tls'' y 'require' actionmailer_gmail'' para' requerir File.dirname (__ FILE__) + '/../ ../lib/gmail_smtp/smtp_tls'' y 'requieren File.dirname (__ FILE__) + '/../../ lib/gmail_smtp/actionmailer_gmail'' respectivamente. – user664833

+0

El enlace está muerto, ¿podría publicar una nueva @coneybeare? –

+0

el enlace no funciona :( –

8

acabo de ir a través de este y encontró que sólo tiene que ir a través de cada plugin para comprobar algunas cosas:

  • ¿Es una joya en rubygems? Si es así, sólo se adhieren en su Gemfile y eliminar de vendor/plugins
  • Si no hay joya está disponible, o la joya es vieja, tomar la carpeta en vendor/plugins y moverlo a lib/plugins

Una cosa que me encontré con que es que luego necesita requerir todos esos complementos manualmente. Aquí está el inicializador he creado y colocado 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 valores de inicialización que necesitaba para algunos de los plugins, por lo que se trasladó esos inicializadores particulares en la carpeta lib/plugins/initializers. Debe nombrar 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!

+0

Y qué pasa si una persona ha anulado un controlador de una gema , ¿cómo mover eso a lib? –

7

las otras dos respuestas son buenas y parecen funcionar.

Sin embargo, si su plugin consiste en un único archivo .rb bajo vendedor/plugins /.../ lib y el vendedor/plugins /.../ init.rb es sólo un

require 'pluginname' 

A continuación, simplemente copie el único archivo en su directorio lib y agregue un archivo a config/initializers que requiera 'yourpluginname'

Aquí hay un ejemplo concreto usando el plugin acts_as_rated que aún no es una joya.

  1. copia vendedor/plugins/acts_as_rated/lib/acts_as_rated.rb a lib/
  2. crear un archivo de configuración/inicializadores/acts_as_rated.rb con la siguiente ...

    requieren 'acts_as_rated'

  3. de eliminación de proveedores/plugins/acts_as_rated

+0

Utilicé este consejo para obtener ssl_requirement de proveedor hasta lib. ¡Gracias! – Nungster

0

Nadie ha mencionado la conversión a un Railt es decir, Rails :: Engine.

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

A continuación, echar un vistazo a la documentación Railtie [y encontrar su destino Rails versión]:

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

Es muy fácil de convertir sólo un plugin antiguo init.rb a un railtie de esta manera, y te da un camino hacia Rails 4+.

¿Tienes visualizaciones o controladores ?, entonces, usa un 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 Rails.

Cuestiones relacionadas