run rails portable logs instal how deploy ruby-on-rails heroku ruby-on-rails-plugins

ruby on rails - portable - Complementos de estilo Rails 2.3 y advertencias de desactivación que ejecutan tareas en Heroku



how to deploy rails api in heroku (8)

¿Estás usando Heroku?

Heroku inyectará complementos en las aplicaciones de Rails 3.x. Para evitar esta inyección en Rails 3, incluye la gema rails_12factor en tu aplicación. ( Heroku Ruby Support 2013-10-26)

La gema rails_12factor también se requiere en rieles 4.

Si esta gema no está presente en su aplicación, recibirá una advertencia durante la implementación y sus activos y registros no serán funcionales. ( Rails 4 en Heroku 2013-10-26)

Tan recientemente como 2013-08, heroku siempre inyectó complementos en aplicaciones de rieles 3, incluso aplicaciones con las gemas recomendadas. Este fue un problema con el buildpack de ruby, y fue corregido por PR 11 , se fusionó en 2013-08-06.

Estoy actualizando a Rails 3.2 y ejecutando rake db: migrate me da varios errores del formulario:

ADVERTENCIA DE DEPRESIÓN: ¡tiene 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/01/04/rails-3-2-0-rc2-has-been-released . (llamado desde / app / Rakefile: 7)

Lo que es desconcertante es que mi directorio de vendor/plugins está vacío. ¿Hay algún otro directorio de complementos al que haga referencia?


El mejor enfoque que he encontrado está documentado here . Esto supone que buscó y encontró esta pregunta porque tiene complementos antiguos.

Fui con la opción Hacer que no fuera una joya en absoluto , porque tenía que ser capaz de activar / desactivar complementos durante mi implementación de Capistrano, según el sabor de la aplicación que estaba implementando. Antes de usar config.plugins para especificar qué complemento usar. Con este enfoque estoy usando un "requerir" en config.before_configuration en su lugar.


La nueva forma de silenciar los avisos de desaprobación es:

config.active_support.deprecation = :silence

en su archivo config/environments/production.rb .


Parece que Heroku finalmente se ha ocupado de esto.

Injecting plugin ''rails_log_stdout'' Injecting plugin ''rails3_serve_static_assets'' Add ''rails_12factor'' gem to your Gemfile to skip plugin injection


Puedes probar

::ActiveSupport::Deprecation.silenced = true

en su production.rb ya que es solo ruido.


Solo pon 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 lo requiere en config/application.rb justo después de requerir Rails:

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

Todas las deprecaciones de los complementos de estilo 2.x deben silenciarse. Otras desaprobaciones aparecerán.


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

Para la inyección de logger puedes intentar usar la nueva gema de Heroku que mencionó en su respuesta anterior .

Lo que hicimos en cambio es esto:

Puede inhibir a Heroku de inyectar sus propios complementos si tiene un directorio con el mismo nombre en su carpeta de vendor/plugins . La carpeta solo necesita existir. Heroku no inyectará su complemento, y si no hay código, Rails no se opondrá a las advertencias de desaprobación. Acabamos de poner un archivo Léame 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 . Los ajustes a los comportamientos predeterminados de Heroku eran necesarios para Unicornio de todos modos, así que conseguimos dos pájaros en una piedra.


en config / environment.rb agregar:

ActiveSupport::Deprecation.silenced = true

antes de inicializar los rieles, 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 para desactivar 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