我正在升级到Rails 3.2,运行rake db:migrate会给我带来几个错误:
弃用警告:您在供应商/插件中拥有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
目录是空的 - 是否有另一个引用的插件目录?
答案 0 :(得分:203)
你在使用Heroku吗?
Heroku将在Rails 3.x应用程序中注入插件.. 为了避免这种情况 在Rails 3中注入,包括你的rails_12factor gem 应用。 (Heroku Ruby Support 2013-10-26)
rails 4中也需要rails_12factor gem。
如果您的应用程序中没有此gem,您将收到一个 部署时警告,您的资产和日志不会 功能。 (Rails 4 on Heroku 2013-10-26)
就在2013-08赛季,heroku总是在rails 3应用程序中注入插件,甚至包含推荐宝石的应用程序。这是ruby buildpack的一个问题,由PR 11修复,并于2013-08-06合并。
答案 1 :(得分:12)
你可以尝试
::ActiveSupport::Deprecation.silenced = true
在production.rb
中,因为它只是噪音。
答案 2 :(得分:7)
在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顶部附近插入静默配置:
# 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
答案 3 :(得分:4)
我发现的最佳方法是here。这是假设您搜索并发现此问题,因为您执行具有旧式插件。
我选择使它不是一个宝石部分,因为我需要能够在我的capistrano部署期间根据我正在部署的应用程序的风格打开/关闭插件。在我使用config.plugins指定要使用的插件之前。通过这种方法,我在config.before_configuration上使用了“require”。
答案 4 :(得分:1)
将以下猴子补丁放入/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样式插件的所有弃用都应该是静音的。其他弃用将出现。
答案 5 :(得分:1)
这是一种更清洁的方式,而不仅仅是沉默警告,这是你可以做的。
对于记录器注入,您可以尝试使用Heroku's new gem中提到的Jared Beck his reply above。
我们做的是:
如果vendor/plugins
文件夹中有相同名称的目录,则可以禁止Heroku注入自己的插件。该文件夹只需要存在。 Heroku然后不会注入它的插件,如果没有代码,Rails将不会反对弃用警告。我们只是将自述文件解释为:
vendor/plugins/rails_log_stdout/readme.md
Heroku注入的日志插件的目的是打开Heroku风格的日志记录(它需要将日志发送到STDOUT,而不是文件)。为了实现这一目标,我们完成了this answer中描述的内容。无论如何,对于独角兽来说,需要对Heroku的默认行为进行调整,所以我们一石二鸟。
答案 6 :(得分:0)
隐藏弃用通知的新方法是:
config.active_support.deprecation = :silence
在config/environments/production.rb
文件中。
答案 7 :(得分:0)
看起来Heroku终于解决了这个问题。
Injecting plugin 'rails_log_stdout'
Injecting plugin 'rails3_serve_static_assets'
Add 'rails_12factor' gem to your Gemfile to skip plugin injection