Plugins de estilo Rails 2.3 y advertencias de obsolescencia ejecutando tarea en Heroku


Estoy actualizando a Rails 3.2, y ejecutar rake db: migrate me da varios errores de la forma:

ADVERTENCIA DE OBSOLESCENCIA: ¡Tiene plugins de estilo Rails 2.3 en vendor / plugins! El soporte para estos plugins se eliminará en Rails 4.0. Sacarlos y unirlos en tu Gemfile, o doblar en su aplicación como lib/myplugin/* y config/inicializadores/myplugin.rb. Consulte las notas de la versión para obtener más información al respecto: http://weblog.rubyonrails.org/2012/01/04/rails-3-2-0-rc2-has-been-released . (llamado desde at /app/Rakefile:7)

Lo que es desconcertante es que mi directorio vendor/plugins está vacío? ¿hay otro directorio de plugins al que esté haciendo referencia?

Author: Simone Carletti, 0000-00-00

8 answers

¿Estás usando Heroku?

Heroku inyectará plugins en Rails 3.x aplicaciones .. Para evitar esto inyección en Rails 3, incluya la gema rails_12factor en su aplicación. (Soporte de Rubí Heroku 2013-10-26)

La gema rails_12factor también es necesaria en rails 4.

Si esta gema no está presente en su solicitud, recibirá un advertencia durante la implementación, y sus activos y registros no serán funcional. (Carriles 4 en Heroku 2013-10-26)

En fecha tan reciente como 2013-08, heroku siempre inyectó plugins en las aplicaciones de rails 3, incluso aplicaciones con las gemas recomendadas. Este fue un problema con ruby buildpack, y fue solucionado por PR 11 , fusionado el 2013-08-06.

 203
Author: Jared Beck,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-27 03:57:10

Puedes probar

::ActiveSupport::Deprecation.silenced = true

En su production.rb ya que es solo ruido.

 12
Author: kain,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-02-26 20:56:22

En config/environment.po add:

ActiveSupport::Deprecation.silenced = true 

Antes de inicializar rails, así:

# Load the rails application                                                                                                                                             
require File.expand_path('../application', __FILE__)

ActiveSupport::Deprecation.silenced = true                                                                                                                               

# Initialize the rails application                                                                                                                                       
MyApp::Application.initialize!

De manera similar a deshabilitar las advertencias en las tareas de rake, inserte la configuración de silenciamiento cerca de la parte superior de su Rakefile:

# Load the rails application                                                                                                                                             
require File.expand_path('../application', __FILE__)

ActiveSupport::Deprecation.silenced = true                                                                                                                           

# Initialize the rails application                                                                                                                                       
MyApp::Application.initialize!

Opcionalmente puede envolver esto en un bloque para solo silenciar en producción:

if ENV['RAILS_ENV'] == "production"
  ActiveSupport::Deprecation.silenced = true
end
 7
Author: Michael Hale,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-02-01 20:09:33

El mejor enfoque que he encontrado está documentado aquí. Esto es asumiendo que buscaste y encontraste esta pregunta porque tienes plugins de estilo antiguo.

Fui con la parte Que no sea una gema en absoluto, porque necesitaba poder activar/desactivar los complementos durante mi implementación de capistrano, en función del tipo de aplicación que estaba implementando. Antes de usar config.plugins para especificar qué plugin utilizar. Con este enfoque estoy utilizando un "requerir" en config.before_configuration en su lugar.

 4
Author: yuяi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-07-23 23:03:37

Simplemente coloque el siguiente parche de mono en /lib/silence_heroku_warnings.rb

module Rails
  class Plugin < Engine

    alias :not_silenced_initialize :initialize

    def initialize(root)
      ActiveSupport::Deprecation.silence{ self.send :not_silenced_initialize, root }
    end

  end
end

Y requerirlo en config/application.rb justo después de requerir Rails:

require 'rails/all'
require File.expand_path('../../lib/silence_heroku_warnings', __FILE__)

Todas las obsoletas de 2.los plugins de estilo x deben ser silenciados. Aparecerán otras obsoletas.

 1
Author: skalee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-08 12:35:02

Una forma más limpia que simplemente silenciar las advertencias, esto es lo que puede hacer.

Para la inyección del registrador puede intentar usar la nueva gema de Heroku que Jared Beck mencionó en su respuesta anterior.

Lo que hicimos en su lugar es esto:

Puedes inhibir a Heroku de inyectar sus propios plugins si tienes un directorio con el mismo nombre en tu carpeta vendor/plugins. La carpeta solo tiene que existir. Heroku entonces no inyectará su plugin, y si no hay código, Rails no objetará con advertencias de obsolescencia. Acabamos de poner un archivo readme explicando esto en:

vendor/plugins/rails_log_stdout/readme.md

El propósito del complemento inyectado de Heroku para el registro es activar el registro al estilo Heroku (requiere que los registros se envíen a STDOUT, no a un archivo). Para recuperarlo, hicimos lo que describí en esta respuesta . Se necesitaban ajustes en los comportamientos predeterminados de Heroku para Unicornio de todos modos, así que tenemos dos pájaros de un tiro.

 1
Author: Wolfram Arnold,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:25:26

La nueva forma de silenciar los avisos de obsolescencia es:

config.active_support.deprecation = :silence

En su archivo config/environments/production.rb.

 0
Author: Jonathan Métillon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-20 04:19:45

Parece que Heroku finalmente ha abordado esto.

   Injecting plugin 'rails_log_stdout'
   Injecting plugin 'rails3_serve_static_assets'
   Add 'rails_12factor' gem to your Gemfile to skip plugin injection
 0
Author: raidfive,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-29 18:46:49