"WARN प्रतिक्रिया शरीर की सामग्री-लंबाई निर्धारित नहीं कर सका।" माध्य और मैं इससे कैसे छुटकारा पाऊं?


320

रेल 3.1 में अपग्रेड करने के बाद से मैं अपने विकास लॉग में यह चेतावनी संदेश देख रहा हूं:

WARN प्रतिक्रिया शरीर की सामग्री-लंबाई निर्धारित नहीं कर सका। प्रतिक्रिया या सेट की सामग्री-लंबाई निर्धारित करेंResponse#chunked = true

इसका क्या मतलब है और मैं इसे कैसे निकाल सकता हूं? कोई समस्या है?


1
यहाँ भी, मेरे लिए यह तब हो रहा है जब यह जेएस के माध्यम से एक दूरस्थ कॉल है।
टिम बैस

2
रूबी 1.9.3 में अपग्रेड होते ही मुझे यह मिलना शुरू हो गया। इसे पहले नहीं देख रहा था। मुझे लगता है कि रूबी 1.9.3 में वेबब्रिक में बदलाव के कारण यह होना चाहिए ...
टायलर रिक

50
यह वास्तव में एक WEBrick मुद्दा है। इस बीच, आप अपने ब्रिफ़ाइल और बूट रेल्स को 'पतली' मणि जोड़ सकते हैं, इसके बजाय वेबब्रिक, जैसे rails s thin; टा-दा! और कोई चेतावनी नहीं।
स्कॉट

जवाबों:


229

रेल-कोर के सदस्यों में से एक से एक ही सवाल पूछा गया:

https://twitter.com/luislavena/status/108998968859566080

और जवाब:

https://twitter.com/tenderlove/status/108999110136303617

हाँ, यह ठीक है। इसे साफ करने की जरूरत है, लेकिन कुछ भी नुकसान नहीं हो रहा है।


9
fyi, यदि संदेश आपको परेशान करते हैं, तो वर्कअराउंड के रूप में आप पतले का उपयोग कर सकते हैं ( gem 'thin'अपने रत्न में जोड़ें , अपने सर्वर का उपयोग शुरू करें rails server thin)। (उफ़, अभी देखा कि @Scott लोव ने पहले ही यह ऊपर कहा है।)
निडर_फूल

280
मुझे यह कष्टप्रद लगता है जब इस प्रकार की चीजों को "कुछ भी नहीं हो रहा है" की श्रेणी में डाल दिया जाता है। बस तथ्य यह है कि हजारों लोग समय बर्बाद कर रहे हैं यह पता लगाने के लिए कि क्या चल रहा है, यह विवाद करने के लिए पर्याप्त है।
मार्क फ्रेजर

16
@KenThompson समस्या वेब्रिक है, न कि रेल। वेइब्रिक कीप-लिविंग कनेक्शन का समर्थन नहीं करता है और इस तरह हम चेतावनी / मुद्दा उठा रहे हैं। यह अनुशंसा की जाती है कि आप वेब के लिए एक उचित / बेहतर वेबसर्वर (जैसे पतले या यात्री स्टैंडअलोन) का उपयोग करें। रूबी के आगामी संस्करण इस मुद्दे को ठीक कर देंगे।
लुइस लवेना

3
हमारे विकास पीसी पर वेबब्रिक सर्वर एक ही .js.erb फ़ाइल को दो बार प्रस्तुत करता है। दो बार प्रदान करने वाली समस्या हमारे उत्पादन सर्वर पर गायब हो जाती है जो कि nginx चल रही है। तो यह हमारे जैसे मामलों में एक वास्तविक समस्या है।
15:

2
उत्तर में लिंक के बजाय ट्विटर पोस्ट की सामग्री होनी चाहिए।
पेड्रो रोलो

78

निम्नलिखित पैच ने मेरे मामले में समस्या को हल किया ; मेरे लिए और कोई चेतावनी नहीं।

204_304_keep_alive.patch

जैसा कि ऊपर दिए गए लिंक पर दिखाया गया है, बस फाइल 205presponse.rb को लाइन पर संपादित करें; वास्तव में लिंक रूबी के भविष्य के रिलीज के लिए किए गए सुधार को दर्शाता है।

मैं एक उपयोगकर्ता के रूप में RVM के माध्यम से स्थापित रूबी 1.9.3-p0 पर 3.2.0 रेल का उपयोग कर रहा हूं। तो मेरे मामले में स्थान है:

~/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/webrick/httpresponse.rb

फ़ाइल के स्थान को बदल दिया जाना स्थापना के प्रकार, आरवीएम या नहीं, या यहां तक ​​कि बहु-उपयोगकर्ता या एकल उपयोगकर्ता के आधार पर भिन्न होता है, इसलिए मैं केवल इसका अंतिम भाग दे रहा हूं:

.../ruby-1.9.3-p0/lib/ruby/1.9.1/webrick/httpresponse.rb

मुझे उम्मीद है कि यह किसी के लिए मददगार हो सकता है।

EDIT: यह उस लिंक का लिंक है जो माणिक परियोजना की ट्रंक शाखा में विचाराधीन लाइन को बदल देता है।


मैं डेबियन निचोड़ का उपयोग कर रहा हूं, उपयुक्त संस्करण माणिक 1.9.3p194 स्थापित है, और यह समस्या अभी भी होती है। रूबी दिनांक २०१२-०४-२० और टेंडरलॉव का पैच दिनांक २१ दिसंबर ०::३०:१४ २०११ है, लेकिन यह अभी भी होता है।
kristianp

डेबियन निचोड़ पर, RVM- स्थापित रूबी संस्करण 1.9.3-p327 WEBrick अभी भी ये समस्याग्रस्त चेतावनी देता है।
MarkDBlackwell

56

स्पष्ट रूप से जेम को मणि जोड़ने से मेरे लिए चेतावनी संदेशों से छुटकारा मिल गया:

group :development do
  gem 'webrick', '~> 1.3.1'
end

5
हां, मेरे लिए भी। यह कार्य फ़ीचर # 5481 रूबी मानक लाइब्रेरी में क्यों हो सकता है, इसके लिए एक सुराग : "'नकली रत्न' के कारण, 'मणि अद्यतन' द्वारा स्थापित stdlib की नई फ़ाइलों को तब तक अनदेखा किया जाता है जब तक कि उपयोगकर्ता मणि ['वीकिक'] स्पष्ट रूप से नहीं लिखता। । "
MarkDBlackwell

2
यह 'इसे अनदेखा', या 'पैच वेब्रिक' की तुलना में बहुत बेहतर है। धन्यवाद!
नेसुर

54

आप डिफ़ॉल्ट वेब्रिक की जगह थिन का भी उपयोग कर सकते हैं। इसमें जोड़ेंGemfile gem 'thin'

फिर rails s thinपतली का उपयोग करेगा, और चेतावनी गायब हो जाएगी।


हाँ। यह वही है जो मैंने हाल के महीनों में किया है। रयान बेट्स ने हाल ही में हुई एक रेलकास्ट में भी उल्लेख किया है।
नैट बर्ड

1
@cam गीत: लगभग सही है: रेल्स वीलिक के बजाय पतले पतले का उपयोग करेंगे, और चेतावनी गायब हो जाएगी।
निर्भय_फूल

1
मैंने समूह thinमें रखा development। रेल 4 दौड़ते समय स्वचालित रूप से इसे उठाती हुई प्रतीत होती हैrails s
ड्रा करें

15

यदि आप .rvm का उपयोग कर रहे हैं, तो इसे ठीक करने के लिए ऐसा करें ...

जैसा कि जोआ सोरेस ने उल्लेख किया है , सभी उसे श्रेय देते हैं, यही वह है जो आप कर सकते हैं यदि आप विकास पर इस चेतावनी से छुटकारा नहीं चाहते हैं।

  1. इस फ़ाइल को खोलने के लिए अपने पसंदीदा संपादक का उपयोग करें:

    ~/.rvm/rubies/<ruby-version>/lib/ruby/1.9.1/webrick/httpresponse.rb
  2. उस पंक्ति पर जाएं जिसमें यह शामिल है (मेरे लिए यह वास्तव में 206 थी):

    if chunked? || @header['content-length']
  3. इसे इस पैच से, इसमें बदल दें :

    if chunked? || @header['content-length'] || @status == 304 || @status == 204
  4. फ़ाइल सहेजें और अंत में अपने रेल सर्वर को पुनरारंभ करें


1
धन्यवाद! मेरे line 107लिए था।
gbdev

12

यह समस्या इस के साथ रूबी की डिक्की शाखा में निर्धारित किया गया है प्रतिबद्ध webrick करने के लिए।

आप इस विशेष webrick फ़ाइल को अपने सेटअप में समान रूप से संपादित कर सकते हैं। अनुमानित स्थान द्वारा पाया जा सकता है:

gem which webrick

फ़ाइल को वास्तव में संपादित करने के लिए:

nano \`ruby -e"print %x{gem which webrick}.chomp %Q{.rb\n}"\`/httpresponse.rb

(या नैनो के बजाय, अपने पसंदीदा संपादक का उपयोग करें।)


ऊपर मेरे फैंसी कमांड लाइन (विनोदपूर्वक संपादक, नैनो सहित) को बिना किसी विशेषता के यहां से हटा दिया गया और यहां के रेलरोड साइट पर कॉपीराइट कर दिया गया
मार्कबडलैकवेल

बैकटिक्स शायद बच नहीं जाना चाहिए। तो यह वास्तव में होना चाहिए: nano `ruby -e"print %x{gem which webrick}.chomp %Q{.rb\n}"`/httpresponse.rb
MarkDBlackwell

5

JRuby संस्करण: यदि आप .rvm का उपयोग कर रहे हैं, तो इसे ठीक करने के लिए ऐसा करें ...

जैसा कि जोआ सोरेस और केजेल्स्की ने उल्लेख किया है , यह वही है जो आप कर सकते हैं यदि आप विकास पर इस चेतावनी से छुटकारा पाना चाहते हैं और आप JRuby का उपयोग कर रहे हैं।

  1. इस फ़ाइल को खोलने के लिए अपने पसंदीदा संपादक का उपयोग करें:

    ~/.rvm/rubies/jruby-<version>/lib/ruby/<1.8 or 1.9>/webrick/httpresponse.rb
  2. उस पंक्ति पर जाएं जिसमें यह शामिल है (मेरे लिए यह रेखा 205 थी):

    if chunked? || @header['content-length']
  3. इसे इस पैच से, इसमें बदल दें :

    if chunked? || @header['content-length'] || @status == 304 || @status == 204
  4. फ़ाइल सहेजें और अंत में अपने रेल सर्वर को पुनरारंभ करें।


@schwabsauce पहले निर्देश को छोड़कर, बाकी JRuby-specific नहीं है; यह फ़ाइल का पता लगाने में मदद करता है। अन्य निर्देशों को स्पष्टता के लिए दोहराया जाता है।
क्रिमबो

3

एक और वर्कअराउंड जो वेब्रिक से आपत्तिजनक रेखा को हटाता है। यह सिर्फ इतना उपयोगी नहीं है:

cd `which ruby`/../../lib/ruby/1.9.1/webrick/ && sed -i '.bak' -e'/logger.warn/d' httpresponse.rb

(आपको आवश्यकता हो सकती है sudo)


3

जोड़ना

config.middleware.use Rack::ContentLength

आपकी application.rbफ़ाइल के लिए, और चेतावनी भी webrick के साथ गायब हो जाएगा। यह भी Content-Lengthउत्पादन में ठीक से सेट जब एक json या पाठ प्रतिक्रिया प्रदान करेगा।


मुझे वास्तव में समस्या को हल रखने के बजाय इसे जिंदा पैच के साथ छिपाने के विचार से प्यार है। दुर्भाग्य से, यह सुझाव सिर्फ चेतावनी के कई बार के रूप में दो बार बाहर थूकना।
भूलभुलैया
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.