2013-06-16 6 views
17

मैं निम्न त्रुटि हो रही है रेल के लिए 4 अपग्रेड करने के बाद:"ऐसा कोई पहले सम्मिलित करने के लिए मध्यस्थ: रैक :: लॉक (RuntimeError)" अपग्रेड करने के बाद रेल के लिए 4

.../ruby-1.9.3-p125/gems/actionpack-4.0.0.rc2/lib/action_dispatch/middleware/stack.rb:125:in 'assert_index': No such middleware to insert before: Rack::Lock (RuntimeError)

हमलावर लाइन है मेरी "remove slashes" रैक पुनर्लेखन नियम:

config.middleware.insert_before(Rack::Lock, Rack::Rewrite) do 
    r301 %r{^/(.*)/$}, '/$1', :headers => {'Cache-Control' => 'public, max-age='+2.week.to_s} 
end 

कोई भी विचार?

उत्तर

38

त्रुटि पता चलता है ("ऐसा कोई पहले सम्मिलित करने के लिए मध्यस्थ") के रूप में, इस मुद्दे को मिडलवेयर आप की कोशिश कर रहे सम्मिलित से पहले (और नहीं मिडलवेयर आप की कोशिश कर रहे सम्मिलित है, जो था के साथ है मेरी प्रारंभिक धारणा)।

Rails4 में, सूत्रण डिफ़ॉल्ट जो Rack::Lock को हटा से सक्षम है।

प्रतिस्थापन खोजने के लिए, आप अपनी रेल परियोजना प्रोजेक्ट से rake middleware चला सकते हैं, और स्टैक की शुरुआत के करीब कुछ ढूंढ सकते हैं। मैं Rack::Runtime लेने के लिए के रूप में यह ढेर में जल्दी है, और बहुत मानक लगता जा रहा हूँ।

तो पुनर्लेखन config है:

config.middleware.insert_before(Rack::Runtime, Rack::Rewrite) do 
    r301 %r{^/(.*)/$}, '/$1', :headers => {'Cache-Control' => 'public, max-age='+2.week.to_s} 
end 
+3

बस एक बात है कि मेरे कुछ समय के लिए उलझन में था 'रेक middleware'' रैक सहित उम्मीद मिडलवेयर की पूरी सूची लौट रहा था :: Lock' और अभी तक मेरी rspec 'रैक :: लॉक' नहीं ढूंढने के कारण परीक्षण विफल रहे। अंत मुझे लगता है कि rspec मिडलवेयर से भरा ढेर लोड नहीं निश्चित रूप से किया गया था (config.middleware सीधे निरीक्षण द्वारा) का एहसास है। इसलिए मैं 'के लिए config/वातावरण/production.rb' पुनर्लेखन ले जाया गया के रूप में मैं rspec में इन पुन: निर्देशों का परीक्षण नहीं किया जाएगा वैसे भी। –

+0

इसे समझने के लिए धन्यवाद! जो संसाधन आप अपने उत्तर में जोड़ रहे हैं वह दुर्भाग्य से मौजूद नहीं है। – Aaron

संबंधित मुद्दे