Answer-ID
  • Întrebări
  • Tag-uri
  • Categorii
Notificări
Recompense
Înregistrare
După înregistrare, veți primi notificări despre răspunsurile și comentariile la întrebările DVS.
Logare
Dacă aveţi deja un cont, autentificaţi-vă pentru a verifica notificările noi.
Aici vor fi recompensele pentru întrebările, răspunsurile și comentariile adăugate sau modificate.
Mai mult
Sursă
Editează
Darren Greaves
Darren Greaves

Frecvent SystemExit în Ruby atunci când efectuați apeluri HTTP

Am un site web Ruby on Rails care face apeluri HTTP către un serviciu Web extern.

Aproximativ o dată pe zi, primesc un e-mail de eroare SystemExit (stacktrace de mai jos) unde un apel la serviciu a eșuat. Dacă apoi încerc exact aceeași interogare pe site-ul meu momente mai târziu, acesta funcționează bine. Se întâmplă de când site-ul a intrat live și nu am avut noroc să urmăresc ce-i provoacă.

Ruby este versiunea 1.8.6 iar șinele este versiunea 1.2.6.

Oricine altcineva are această problemă?

Aceasta este eroarea și stacktrace.

Sa produs un SystemExit   /usr/local/lib/ruby/gems/1.8/gems/rails-1.2.6/lib/fcgi_handler.rb:116:in   Ieșire'   /usr/local/lib/ruby/gems/1.8/gems/rails-1.2.6/lib/fcgi_handler.rb:116:in   exit_now_handler“   /usr/local/lib/ruby/gems/1.8/gems/activesupport-1.4.4/lib/active_support/inflector.rb:250:in   to_proc '/usr/local/lib/ruby/1.8/net/protocol.rb:133:in apel "   /usr/local/lib/ruby/1.8/net/protocol.rb:133:in sysread '   /usr/local/lib/ruby/1.8/net/protocol.rb:133:in rbuf_fill '   /usr/local/lib/ruby/1.8/timeout.rb:56:in timeout '   /usr/local/lib/ruby/1.8/timeout.rb:76:in timeout '   /usr/local/lib/ruby/1.8/net/protocol.rb:132:in rbuf_fill '   /usr/local/lib/ruby/1.8/net/protocol.rb:116:in readuntil '   /usr/local/lib/ruby/1.8/net/protocol.rb:126:in readline '   /usr/local/lib/ruby/1.8/net/http.rb:2017:in read_status_line '   /usr/local/lib/ruby/1.8/net/http.rb:2006:in read_new '   /usr/local/lib/ruby/1.8/net/http.rb:1047:in solicitarea "   /usr/local/lib/ruby/1.8/net/http.rb:945:in request_get '   /usr/local/lib/ruby/1.8/net/http.rb:380:in get_response '   /usr/local/lib/ruby/1.8/net/http.rb:543:inceputul "   /usr/local/lib/ruby/1.8/net/http.rb:379:in get_response '

20 2008-08-02T17:26:39+00:00 7
Programare
ruby
ruby-on-rails
crash
Comentarii la întrebare (0)
Marcel
17 noiembrie 2009 в 6:36
2009-11-17T18:36:50+00:00
Mai mult
Sursă
Editează
#50778578

Veți găsi acest lucru adesea, atunci când încercați să construiți ceva de pe rafturi care repetă un produs existent, aproape întotdeauna doar piesele vor costa mai mult decât produsul existent. Motivul este că aceștia își pot produce în mod obișnuit produsul, cumpărau piese în vrac în reduceri ale costurilor etc.

Priviți cu atenție panourile "serial-over-Bluetooth", unele dintre ele susțin, de fapt, profile diferite. Ceea ce căutați este un modul care acceptă profilul Bluetooth HID (dispozitivul de interfață umană, mouse-ul, tastatura, joystick-ul, telecomanda wii etc.).

Check out această întrebare anterioară , listează câteva module bluetooth, pe care le puteți cumpăra singur cantități pentru prețuri destul de rezonabile, unele sau toate acestea ar trebui să sprijine HID.

11
0
Comentarii (0)
EndangeredMassa
17 noiembrie 2009 в 9:28
2009-11-17T21:28:54+00:00
Mai mult
Sursă
Editează
#50778580

Nu este probabil soluția pe care o căutați, dar m-am gândit că este relevantă la întrebarea:

https://serverfault.com/questions/ 43615/configurare-a-linux-computer-act-as-a-bluetooth-tastatura-mouse-ul

2
0
Comentarii (0)
Ben Jackson
24 ianuarie 2014 в 8:21
2014-01-24T08:21:55+00:00
Mai mult
Sursă
Editează
#50778581

Cel mai bun pariu este să distrugi o combinație tastatură Bluetooth/mouse și să-i inversezi așa cum ai descris. Puneți un domeniu de aplicare pe liniile mouse-ului înainte de să îl distrugeți pentru a vedea ce trebuie să faceți.

Problema cu cumpărarea unui modul (cea mai mare parte va scoate profilurile SPP/DUN din cutie și va acționa ca un port serial) este că nu puteți obține mâinile pe SDK-urile necesare reprogramării acelor jetoane pentru a face altceva. Aveți nevoie de un modul cu firmware-ul HCI ("Host Controller Interface"). Acest lucru va expune teancul Bluetooth la microcontroler printr-o interfață serială bine specificată. Veți avea nevoie de o bună înțelegere a Bluetooth deoarece obținerea modulului de a face ceva va necesita interpretarea evenimentelor primite prin intermediul HCI și mutarea mașinii de stat înainte prin invocarea următorului pas prin HCI. Vestea bună este că există o mulțime de exemple de analizat deoarece interfețele Bluetooth de la partea gazdă expun acest lucru la sistemul de operare.

Un modul ideal (dacă există un astfel de lucru) ar fi un modul Bluetooth 4.1 cu suport BLE care expune HOGP (HID pe protocolul GATT) la un microcontroler. HOGP vă permite să utilizați descriptorii de raport USB HID și este foarte aproape de a fi "USB wireless". Din păcate, suportul BT4.1/HOGP nu este încorporat până la foarte recentul Android și Windows 8. Un modul care a vorbit cu un microcontroler și l-a lăsat să stabilească descriptorii de rapoarte și apoi să trimită rapoarte ar fi un lucru foarte util.

2
0
Comentarii (0)
Michiel de Mare
1 ianuarie 1970 в 3:00
1970-01-01T03:00:00+00:00
Mai mult
Sursă
Editează
#519

Utilizarea fcgi cu Ruby este cunoscută a fi foarte buggy.

Practic, toată lumea sa mutat la Mongrel din acest motiv și vă recomand să faceți același lucru.

0
0
Comentarii (0)
Eric Davis
1 ianuarie 1970 в 3:00
1970-01-01T03:00:00+00:00
Mai mult
Sursă
Editează
#619

A trecut o vreme de când am folosit FCGI, dar cred că un proces FCGI ar putea arunca un SystemExit dacă firul a durat prea mult. Acesta ar putea fi serviciul web care nu răspunde sau chiar o interogare DNS lentă. Unele rezultate ale Google arată o eroare similară cu Python și FCGI, astfel că mișcarea în mongrel ar fi o idee bună. Acest post este referința mea pe care am folosit-o pentru a stabili mongrel și mă refer în continuare la acesta.

0
0
Comentarii (0)
Simon
1 ianuarie 1970 в 3:00
1970-01-01T03:00:00+00:00
Mai mult
Sursă
Editează
#7926

Mă voi arunca o privire la Călător . Este mult mai ușor să mergeți decât soluția tradițională de Apache / nginx + Mongrel.

0
0
Comentarii (0)
cpm
1 ianuarie 1970 в 3:00
1970-01-01T03:00:00+00:00
Mai mult
Sursă
Editează
#35689

Obișnuiau să le obțin mereu pe Apache1 / fastcgi. Cred că este provocată de închiderea rapidă înainte ca Ruby să se termine.

Trecerea la mongrel este un prim pas bun, dar mai sunt multe de făcut. Este o idee proastă de a elimina serviciile web pe paginile live, în special de la Rails. Rails nu este sigură în legătură cu firul. Numărul de conexiuni concurente pe care le puteți sprijini este egal cu numărul de mongrels (sau procese de pasageri) din cluster.

Dacă aveți un mongrel și cineva accesează o pagină care solicită un serviciu web care durează 10 secunde în timp, fiecare solicitare de pe site-ul dvs. va expira în acel moment. Cea mai mare parte a balancerilor de sarcină doar ciclu prin mongrels orbește, deci dacă aveți două mongrels, fiecare altă cerere va timeout.

Orice lucru care poate fi imprevizibil lent trebuie să se întâmple într-o coadă de locuri de muncă. Primul hit la / lent / acțiune adaugă lucrarea la coadă, iar / slow / action continuă să se actualizeze prin reîmprospătarea paginilor sau interogările prin ajax până când lucrarea este terminată, iar apoi obțineți rezultatele din coada de așteptare. Există câteva cozi de locuri de muncă pentru Rails în zilele noastre, dar cea mai veche și probabil cea mai utilizată este BackgroundRB .

O altă alternativă, în funcție de natura aplicației dvs., este de a elimina serviciul la fiecare N minute prin cron, cache-ul de date la nivel local și de a vă citi pagina live din memoria cache.

0
0
Comentarii (0)
Adăugati o întrebare
Categorii
Toate
Tehnologii
Cultură
Viață / Artă
Stiință
Profesii
Afaceri
ID
KO
RU
© Answer-ID 2021
Sursă
https://stackoverflow.com
în cadrul licenței cc by-sa 3.0 cu atribuire