Rails2.3风格的插件和弃用警告在 Heroku 运行

我正在升级到 Rails 3.2,运行 rake db: shift 时出现了几个表单错误:

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

令人困惑的是我的 vendor/plugins目录是空的——它引用的是另一个插件目录吗?

21648 次浏览

你在用 Heroku 吗?

Heroku 将在 Rails 3.x 应用程序中注入插件。 为了避免这一切 在 Rails3中注入,在您的 (Heroku Ruby 支持2013-10-26)

Rail _ 12factor gem 在 Rails4中也是必需的。

如果应用程序中没有这个 gem,您将收到一个 部署时发出警告,您的资产和日志将不会 (Heroku 上的 Rails 42013-10-26)

最近在2013-08年,heroku 总是在 Rails3应用程序中插入插件,甚至在应用程序中插入推荐的 gems。这是一个与红宝石构建包的问题,并由 公关11修复,合并于2013-08-06。

你可以试试

::ActiveSupport::Deprecation.silenced = true

因为它只是噪音。

压制弃权通知的新方法是:

config.active_support.deprecation = :silence

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

我发现的最好的方法是文档化的 给你。这是假设您搜索并发现了这个问题,因为您 有老式的插件。

我选择了 让它不再是宝石部分,因为我需要能够在 Capistrano 部署期间根据我部署的应用程序的风格打开/关闭插件。在我使用 config.plugins 来指定使用什么插件之前。通过这种方法,我在 config.before _ configuration 上使用了一个“ need”。

在 config/環境.rb 中添加:

ActiveSupport::Deprecation.silenced = true

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

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


ActiveSupport::Deprecation.silenced = true


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

与禁用 rake 任务中的警告类似,在 Rakefile 顶部附近插入静音配置:

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


ActiveSupport::Deprecation.silenced = true


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

您可以选择将其包装在块中,以便在生产环境中只保持静默:

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

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

在需要 Rails 之后,在 config/application.rb中需要它:

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

所有来自2.x 风格插件的反对意见应该被禁止,其他的反对意见将会出现。

除了让警告保持沉默之外,还有一个更干净的方法,那就是你可以做的。

对于日志器注入,您可以尝试使用 以上是他的回复中提到的 杰瑞德 · 贝克中的 Heroku 的新宝石

我们所做的是:

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

vendor/plugins/rails_log_stdout/readme.md

Heroku 的插入式日志记录插件的目的是打开 Heroku 风格的日志记录(它需要将日志发送到 STDOUT,而不是发送到文件中)。为了拿回来,我们做了我在 这个答案中描述的事情。无论如何,独角兽需要对 Heroku 的默认行为进行调整,所以我们一举两得。

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

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