Rails 2.3风格的插件和弃用警告在Heroku中运行任务

我正在升级到Rails 3.2,并运行耙db:migrate给我几个forms的错误:

弃权警告:您在供应商/插件中有Rails 2.3风格的插件! 在Rails 4.0中将会删除对这些插件的支持。 将它们移出并将它们捆绑到您的Gemfile中,或者将它们作为lib / myplugin / *和config / initializers / myplugin.rb折叠到您的应用程序中。 有关更多信息,请参阅发行说明: http : //weblog.rubyonrails.org/2012/01/04/rails-3-2-0-rc2-has-been-released 。 (从/ app / Rakefile调用:7)

有什么令人困惑的是,我的vendor/plugins目录是空的 – 是否有另一个插件目录,它是参考?

你在用Heroku吗?

Heroku将在Rails 3.x应用程序中注入插件。要避免在Rails 3中进行此注入,请在应用程序中包含rails_12factor gem。 ( Heroku Ruby支持 2013-10-26)

导轨4中也需要rails_12factor gem。

如果此应用程序中不存在此gem,则在部署期间将收到警告,并且您的资产和日志将不起作用。 ( Heroku上的Rails 4 2013-10-26)

最近2013-08,heroku总是在rails 3应用程序中插入插件,甚至是推荐的gem应用程序。 这是rubybuildpack的问题,并由PR 11修复,于2013-08-06合并。

你可以试试

 ::ActiveSupport::Deprecation.silenced = true 

在你的production.rb因为它只是噪音。

在config / environment.rb中添加:

 ActiveSupport::Deprecation.silenced = true 

在初始化rails之前,像这样:

 # Load the rails application require File.expand_path('../application', __FILE__) ActiveSupport::Deprecation.silenced = true # Initialize the rails application MyApp::Application.initialize! 

与在rake任务中禁用警告类似,在Rakefile顶部附近插入沉默configuration:

 # Load the rails application require File.expand_path('../application', __FILE__) ActiveSupport::Deprecation.silenced = true # Initialize the rails application MyApp::Application.initialize! 

您可以select将其包装在一个块中,以便在生产中保持沉默:

 if ENV['RAILS_ENV'] == "production" ActiveSupport::Deprecation.silenced = true end 

我发现的最好的方法是在这里logging 。 这是假设你search,并发现这个问题,因为你有旧式的插件。

我使用了它并不是gem ,因为我需要在我的capistrano部署期间能够打开/closures插件,这取决于我部署的应用程序的风格。 之前我使用config.plugins指定要使用的插件。 使用这种方法,我在config.before_configuration上使用了“require”。

只要把下面的猴子补丁放入/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 

并要求在config/application.rb需要Rails之后:

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

所有来自2.x风格的插件的弃用应该被禁止。 其他弃用将显示。

一个更干净的方式,而不只是沉默的警告,这里是你可以做的。

对于logging器注入,您可以尝试使用Jared Beck在上面的回复中提到的Heroku的新gem 。

我们做的是这样的:

如果您的vendor/plugins文件夹中有相同名称的目录,则可以禁止Heroku插入自己的插件。 该文件夹只需要存在。 Heroku然后不会注入它的插件,如果没有代码,Rails将不会反对弃用警告。 我们只是把一个自述文件解释为:

 vendor/plugins/rails_log_stdout/readme.md 

Heroku注入插件的目的是打开Heroku风格的日志logging(它需要将日志发送到STDOUT,而不是文件)。 为了得到回报,我们做了我在这个答案中描述的。 无论如何,对于独angular兽来说,需要调整Heroku的默认行为,所以我们得到了两只鸟。

消除贬低通知的新方法是:

 config.active_support.deprecation = :silence 

在你的config/environments/production.rb文件中。

看起来Heroku终于解决了这个问题。

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