“UYARI Yanıt gövdesinin içerik uzunluğu belirlenemedi.” ne demek ve ondan nasıl kurtulurum?


320

Rails 3.1'e yükseltme yaptığımdan beri bu uyarı iletisini geliştirme günlüğümde görüyorum:

UYARI Yanıt gövdesinin içerik uzunluğu belirlenemedi. Yanıtın içerik uzunluğunu veya kümesini ayarlamaResponse#chunked = true

Bu ne anlama geliyor ve nasıl kaldırabilirim? Sorun mu?


1
Aynı şekilde, benim için JS üzerinden uzak bir çağrı olduğunda oluyor.
Tim Baas

2
Bugün Ruby 1.9.3'e yükseldiğimde bunu almaya başladım. Daha önce görmüyordum. Bence Ruby 1.9.3'teki WEBrick'teki değişiklikler nedeniyle olmalı ...
Tyler Rick

50
Gerçekten bir WEBrick meselesidir. Bu arada, 'ince' taş Gemfile ve önyükleme rayları WEBrick yerine ör rails s thin. Sürpriz! Başka uyarı yok.
Scott

Yanıtlar:


229

Aynı soruyu Rails-Core üyelerinden birine sordu:

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

Ve cevap:

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

Evet, sorun değil. Temizlenmesi gerekiyor, ama hiçbir şey incinmiyor.


9
fyi, mesajlar sizi rahatsız ediyorsa, geçici bir çözüm olarak ince kullanabilirsiniz ( gem 'thin'gemfile'ınıza ekleyin , sunucunuzu kullanarak başlatın rails server thin). (oops, @Scott Lowe'un yukarıda söylediğini fark etti.)
fearless_fool

280
Bu tür şeyler "hiçbir şey zarar görmüyor" kategorisine konulduğunda bu can sıkıcı buluyorum. Binlerce insanın neler olup bittiğini anlamak zorunda kaldığı için zaman harcamak, buna itiraz etmek için yeterlidir.
Mark Fraser

16
@KenThompson sorun Rails değil Webrick. Webrick canlı bağlantılarını desteklemez ve bu nedenle gördüğümüz uyarı / sorunu arttırır. Web için uygun / daha iyi bir web sunucusu (ince veya yolcu bağımsız gibi) kullanmanız önerilir. Ruby'nin gelecek sürümleri bu sorunu çözecektir.
Luis Lavena

3
Geliştirme bilgisayarımızdaki webrick sunucusu aynı .js.erb dosyasını iki kez oluşturur. Nginx çalıştıran üretim sunucumuzda iki kez oluşturma sorunu ortadan kalkar. Bu bizimki gibi durumlarda GERÇEK bir sorundur.
user938363

2
Cevap, bağlantılar yerine twitter yayınlarının içeriğini içermelidir.
Pedro Rolo

78

Aşağıdaki yama benim durumumda sorunu çözdü ; benim için daha fazla uyarı yok.

204_304_keep_alive.patch

Yukarıdaki bağlantıda gösterildiği gibi, 205 satırındaki httpresponse.rb dosyasını düzenlemeniz yeterlidir; aslında bağlantı gelecekteki Ruby sürümüne yapılan bir düzeltmeyi gösterir.

RVM üzerinden tek bir kullanıcı olarak yüklenen ruby ​​1.9.3-p0 üzerinde 3.2.0 rayları kullanıyorum. Yani benim durumumdaki konum:

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

Değiştirilecek dosyanın konumu, yükleme türüne, RVM'ye veya olmamasına veya hatta çok kullanıcılı veya tek bir kullanıcıya bağlı olarak değişir, bu yüzden sadece son kısmını veriyorum:

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

Umarım bu birisine yardımcı olabilir.

EDIT: Bu yakut projenin gövde dalında söz konusu hattı değiştiren taahhüdün bağlantısıdır .


Debian squeeze, apt ruby ​​sürüm 1.9.3p194 yüklü kullanıyorum ve bu sorun hala oluşuyor. Ruby 2012-04-20 tarihlidir ve tenderlove'un yaması 13 Aralık 07:30:14 2011 tarihli, ancak bu hala gerçekleşmektedir.
kristianp

Debian sıkıştırmasında, RVM tarafından yüklenen Ruby 1.9.3-p327 sürümü WEBrick yine de bu sorunlu uyarıları vermektedir.
MarkDBlackwell

56

Gem'i Gemfile'a açıkça eklemek benim için uyarı mesajlarından kurtuldu:

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

5
Evet, benim için de. Bunun neden işe yaradığına dair bir ipucu Özellik # 5481 Gemifying Ruby standart kitaplığında : "'Sahte taşlar' nedeniyle, bir kullanıcı gem ['webrick'] açıkça yazmazsa, 'gem update' tarafından yüklenen bir stdlib'in yeni dosyaları yok sayılır ."
MarkDBlackwell

2
Bu, 'görmezden gel' veya 'yama webrick' den çok daha iyi. Teşekkür ederim!
nessur

54

Varsayılan Webrick yerine İnce'yi de kullanabilirsiniz. Bunu şuraya ekleGemfile gem 'thin'

sonra rails s thinince kullanır ve uyarı kaybolur.


Evet. Son aylarda bunu yaptım. Ryan Bates de son zamanlarda Railscast'te yer aldı.
Nate Bird

1
@cam şarkısı: neredeyse doğru: rayların ince Webrick yerine ince kullanır ve uyarı kaybolur.
fearless_fool

1
Ben koymak thiniçinde developmentgrubun. Rails 4 çalışırken otomatik olarak alıyorrails s
çizin

15

.Rvm kullanıyorsanız, düzeltmek için bunu yapın ...

João Soares tarafından belirtildiği gibi , ona verilen tüm krediler, bu geliştirme uyarısından kurtulmak istemiyorsanız, yapabileceğiniz şey budur.

  1. Bu dosyayı açmak için favori düzenleyicinizi kullanın:

    ~/.rvm/rubies/<ruby-version>/lib/ruby/1.9.1/webrick/httpresponse.rb
  2. Bunu içeren satıra git (benim için gerçekten 206. satır):

    if chunked? || @header['content-length']
  3. Bu yamadan alınan, şu şekilde değiştirin :

    if chunked? || @header['content-length'] || @status == 304 || @status == 204
  4. Dosyayı kaydedin ve sonunda raylar sunucunuzu yeniden başlatın


1
Teşekkür ederim! line 107Benim içindi .
gbdev

12

Bu sorun, webrick'e olan bu bağlılıkla Ruby'nin bagaj şubesinde düzeltildi .

Bu belirli webrick dosyasını kurulumunuzda benzer şekilde düzenleyebilirsiniz. Yaklaşık konum şu şekilde bulunabilir:

gem which webrick

Dosyayı gerçekten düzenlemek için:

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

(Veya nano yerine favori düzenleyicinizi kullanın.)


Yukarıdaki fantezi komut satırım (mizahi bir şekilde düzenleyici, nano dahil) atıfta bulunmadan kaldırıldı ve burada RailsRock sitesinde telif hakkı alındı .
MarkDBlackwell

Geri tepmeler muhtemelen kaçmamalıdır. Yani gerçekten olmalı nano `ruby -e"print %x{gem which webrick}.chomp %Q{.rb\n}"`/httpresponse.rb.
MarkDBlackwell

5

JRuby sürümü: .rvm kullanıyorsanız, düzeltmek için bunu yapın ...

João Soares ve Kjellski tarafından belirtildiği gibi , bu geliştirme uyarısından kurtulmak ve JRuby kullanıyorsanız, bunu yapabilirsiniz.

  1. Bu dosyayı açmak için favori düzenleyicinizi kullanın:

    ~/.rvm/rubies/jruby-<version>/lib/ruby/<1.8 or 1.9>/webrick/httpresponse.rb
  2. Bunu içeren satıra git (benim için 205 satırıydı):

    if chunked? || @header['content-length']
  3. Bu yamadan alınan, şu şekilde değiştirin :

    if chunked? || @header['content-length'] || @status == 304 || @status == 204
  4. Dosyayı kaydedin ve sonunda raylar sunucunuzu yeniden başlatın.


@schwabsauce İlk talimat dışında kalanlar JRuby'ye özgü değildir; dosyayı bulmanıza yardımcı olur. Netlik için diğer talimatlar tekrarlanır.
Crimbo

3

Sorunlu satırı webrick'ten kaldıran başka bir geçici çözüm. O kadar da kullanışlı değil:

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

(gerekebilir sudo)


3

Ekle

config.middleware.use Rack::ContentLength

sizin için application.rbdosyanın ve uyarı bile WEBrick ile kaybolacaktır. Bu, Content-Lengthjson veya metin yanıtı oluştururken üretimde de düzgün bir şekilde ayarlanacaktır .


Problemi canlı tutma yamasıyla gizlemek yerine çözme fikrini seviyorum. Ne yazık ki, bu öneri uyarıların iki katına çıktı.
Labirent
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.