2013-06-04 81 views
1

我在嘗試在Heroku上運行簡單的Node.js應用程序時遇到了令人沮喪的「錯誤」。 Heroku本身並不報告錯誤 - 應用程序已啓動(未崩潰,未顯示「Hxx」代碼);我所得到的是這樣的:在Heroku上運行Node.js應用程序時出錯

heroku[router]: at=info method=GET path=/index.html 
host=realsheek.herokuapp.com fwd="24.63.82.165" dyno=web.1 connect=0ms 
service=4ms status=404 bytes=33 

當我從瀏覽器中運行的應用程序,它說Cannot GET。我不知道它試圖GET。我的應用程序是使用Mozilla的SocialAPI的SocialProvider的測試平臺。該應用程序本身是來自https://github.com/mixedpuppy/socialapi-demo的演示版本。一些錯誤被修復了,否則這個和這個演示是一樣的(我只用修復了的bug就使用了回購)。我有一個index.html頁面,它安裝SocialProvider,此時服務器端應用程序啓動並執行其餘的魔術。它在localhost上運行良好,但是當我將它推到Heroku時,它失敗了。 git push報告沒有問題(只是通常的「無自述數據」警告)。

我很難過,因爲我只是無法看到它試圖獲得什麼;顯然404錯誤表明缺少頁面,但該應用程序不會調用任何HTML頁面,並且需要的所有內容都存在(如我在localhost上確認的那樣)。

我意識到這並不是很多事情要繼續下去,沒有看到實際的應用程序,也不知道它正在嘗試做什麼。沒有真正的錯誤報告 - 只是404狀態,顯然可能是任何事情。但目前我很難受,所以如果有人有任何見解或建議,我會非常感激。

+0

**更新**我用了一個_LiveHTTPHeaders_工具檢查標題併發出一個GET,並且不返回任何內容(以及404狀態)。 我開始懷疑Heroku服務器設置不像傳統或流行的Web服務器,它設置爲提供'index.html'或'default.html'文件來響應GET,只需要路徑。相反,感覺Heroku可以讓你創建任何你想要的服務器配置,並且「默認」不做任何事情。 我在想,我得到404的原因是我實際上沒有返回任何東西 - 這是我的責任。 – Lew

+0

**更新(續)**:因此,在我的'Node.js'應用程序中,以及創建服務器並偵聽外部,我還需要提供靜態HTML頁面以供用戶查看。 如果有人知道Heroku並且可以證實這一點,它會讓我走上正確的軌道來開發解決方案。謝謝。 – Lew

回答

0

該演示不是一個節點應用程序,或至少沒有包裝的方式heroku喜歡它與Procfile和一切。如果你有一個節點應用程序,那麼它會根據它的代碼(或者至少它應該)來服務於靜態文件,但是對於靜態頁面(比如Apache或者nginx或者其他),Heroku並不是一個標準的Web服務器。 Heroku的構建是爲了運行網絡應用程序,它們本質上是他們自己的服務器。

如果你得到一個節點服務器運行,這個節點的heroku快速啓動應該會幫助你。 https://devcenter.heroku.com/articles/nodejs

+0

感謝您回覆@Strat。我在創建應用程序時經歷了整個頁面,並且經常提到它。你的重點是_「heroku不是靜態頁面的標準網頁服務器(如Apache或nginx或其他)。」這是問題的核心,我越來越相信我的'index.html '沒有被加載(並且最初的瀏覽器'GET'失敗),因爲我沒有做任何事情來提供這個文件,Heroku不會爲我開箱即用;我需要創建一個基本的服務器來響應'GET /'加載'index.html'並返回。那麼它應該工作。 – Lew

+0

我其實是看過你引用的github,app.js是一個有效的nodejs應用程序,它應該提供靜態文件 - 你只需要一個package.json文件和Procfile(只需要一行:node app.js)會告訴Heroku構建這個包(因爲你使用的是類庫等),並啓動app.js,然後你應該能夠檢索你的靜態文件,如index.html。該說明也應該放在heroku頁面上。沒有那些東西,heroku不知道如何處理你發送的大量代碼。希望能幫助到你! – Strat

+0

嘿@Strat - 再次感謝你。是的,我有'package.json'和'Procfile',並且它構建得很好。問題在於瀏覽器正在發佈「GET」,但該應用中沒有任何內容正在爲該頁面提供服務。一旦我添加了一個'app.use(express.static(__ dirname)...)',一切都很好 - 一個頁面正在投放,404消失了,應用程序工作。所以,感謝您花時間回覆 - 如您所見,您是唯一一位。乾杯.... – Lew

0

我有類似的問題。解決方案如下所示:

1)確保已正確書寫Procfile。它應該看起來像:

web: node index.js 

2)推動代碼的Heroku之後,嘗試運行以下命令:

heroku ps:scale web=1 

希望幫助!

+0

我有一個快遞js應用程序,其中我的Procfile說web:節點app.js,我需要將其更改爲index.js?這是否意味着我需要將我的app.js代碼轉移到index.js或者app.js保持原樣? – codeinprogress

7

嗨,我也很沮喪了很多,同時部署應用程序。 爲了部署你需要確定兩件事情。

1)使用設置端口環境變量var port=Number(process.env.PORT || 3000);

2)不要忘了包括Procfile爲網絡:節點app.js(起始文件)