2014-11-05 37 views
0

我有一個Sinatra應用程序使用websockets與sinatra-websocket寶石。其目的是通過使用Watir將數據發送到其他網站上的表單。我使用websockets來允許我的用戶插入capthcas和短信驗證碼而不會丟失Watir會話。Websocket紅寶石應用程序崩潰後頁面刷新

因此,用戶進入https://secret-gorge-5083.herokuapp.com此頁面,填寫表單,按下紅色按鈕,並其重定向到這個頁面https://secret-gorge-5083.herokuapp.com/sending_out,在那裏他們可以決定自己網站的數據應該按紅色按鈕何去何從。

但是,如果用戶重新加載最後一頁,它將沒有所有的外部文件的第一負載(用JS控制檯net::ERR_CONNECTION_REFUSED消息),如果你再次重新啓動它,它會崩潰的應用程序與/home/username/.rvm/gems/ruby-2.1.2/gems/eventmachine-1.0.3/lib/em/connection.rb:266:in 'close_connection': eventmachine not initialized: evma_close_connection (RuntimeError)日誌。

我猜事件機未初始化,因爲初始化它的js文件在第一次重新加載(連接拒絕)後沒有加載。

這是我的代碼githubhttps://github.com/lakesare/credits/

爲什麼連接被拒絕?如何應對我的應用崩潰?

回答

0

計算出在我credits.rb我有這幾行:

connection.onclose do 
    warn("websocket closed from credits.rb") 
    settings.sockets.delete(ws) 
    end 

,我沒有ws變量 - 我把它重新命名爲connection並沒有注意到這一點。所以,每當websocket連接關閉時,它遇到了一個無法識別的變量 - 從而導致應用程序崩潰。我將ws更改爲connection,現在可以在重新加載時正常工作。