2014-01-03 4 views
1

Я обновляете приложение Rails 3.2 к Rails 4, и я бегу на вопрос с какой-то стойки промежуточного слоя:Зачем мне удалять Rails 4.0.2 Hash # diff Предупреждение об устаревании внутри промежуточного раздела/стойки?

Я получаю следующее сообщение об ошибке: DEPRECATION WARNING: Hash#diff is no longer used inside of Rails, and is being deprecated with no replacement. If you're using it to compare hashes for the purpose of testing, please use MiniTest's assert_equal instead.

Линия, по-видимому, вызывая это @app.call(env) от ниже:

class NoWww 

    def initialize(app) 
    @app = app 
    end 

    def call(env) 

    request = Rack::Request.new(env) 

    if request.host =~ /^[^.]+\.[^.]+$/ 
     [301, {"Location" => request.url.sub("//","//www.")}, self] 
    else 
     @app.call(env) 
    end 

    end 


    def each(&block) 
    end 

end 

Примечание уверен, как @app.call(env) является запуск этой Hash # Diff устаревания предупреждение ...?


UPDATE

Мой Middleware Stack выглядит следующим образом:

use Rack::Sendfile 
use ActionDispatch::Static 
use Rack::Rewrite 
use Rack::Lock 
use #<ActiveSupport::Cache::Strategy::LocalCache::Middleware:0x0000010369c180> 
use Rack::Runtime 
use Rack::MethodOverride 
use ActionDispatch::RequestId 
use Rails::Rack::Logger 
use ActionDispatch::ShowExceptions 
use ActionDispatch::DebugExceptions 
use BetterErrors::Middleware 
use ActionDispatch::RemoteIp 
use ActionDispatch::Reloader 
use ActionDispatch::Callbacks 
use ActiveRecord::ConnectionAdapters::ConnectionManagement 
use ActiveRecord::QueryCache 
use ActionDispatch::Cookies 
use ActionDispatch::Session::CookieStore 
use ActionDispatch::Flash 
use ActionDispatch::ParamsParser 
use Rack::Head 
use Rack::ConditionalGet 
use Rack::ETag 
use NoWww 
use OmniAuth::Builder 
run JobBoard::Application.routes 
+0

ли вы возражаете обмена стек промежуточного программного обеспечения, чтобы мы могли помочь расследовать этот вопрос? (Run 'rake middleware') – sikachu

+0

@Sikachu добавил спасибо! – cman77

+0

Знаете ли вы, что какой-либо из драгоценных камней в вашем проекте вызывает метод 'Hash # diff'? У меня были такие же уведомления об изъятиях и выяснили, что один из драгоценных камней, который я использовал, сделал. Итак, я просто скопировал код [Rails 4 Hash # diff] (https://github.com/rails/rails/blob/4-0-stable/activesupport/lib/active_support/core_ext/hash/diff.rb) (за вычетом уведомления об устаревании) и поместите его в файл ** config/initializers/hash.rb **. Это избавило меня от уведомлений, но, очевидно, это следует рассматривать как временное обходное решение, пока все ваши зависимые камни перестанут использовать этот метод. –

ответ

6

обезьяны патч Hash#diff так, чтобы добавить

puts caller.join("\n") 

в начале метода, это даст вам знать, что именно вызывает метод и tr iggers предупреждение об утомлении (http://www.ruby-doc.org/core-2.1.0/Kernel.html#method-i-caller). Затем, если проблема находится в вашем коде, исправьте ее (используя другой подход или добавив Hash#diff через инициализатор, как предложено @PaulFioravanti), и если проблема не в вашем коде, сообщите об ошибке в github для соответствующего проект.

Позвольте мне знать, если вы застряли в какой-то момент с подробной информацией о том, как вы застряли, и я буду расширять этот ответ

+1

спасибо! 'puts caller.join (" \ n ")' выставил преступника. Похоже, это был https://github.com/josevalim/rails-footnotes gem. – cman77

Смежные вопросы