*2022-10-19* 沒想到這麼快就再度發生,上週末的時候,發現部署(Deployed)在 Render 上面的 LINT Bot 開始出現了一點問題。本來以為是因為使用免費服務,所以重新開機。沒想到,今天整個停機不能運作。 通常,第一次能夠修復的錯誤,並不會讓我想整個轉換。但因為已經經歷幾次的錯誤,加上今天嘗試了幾個小時都沒有自動恢復正常,讓我開始搖擺,研究了幾篇文章後,開始決定轉換平台。 這次參考了幾篇文章—《[老牌託管 Heroku 將停止提供免費方案!網友私藏 3 替代平台無痛轉移 | YEE式機器龍](https://yeecord.com/blog/heroku-end-free-tier/)》、《[Heroku 的 10 大替代品](https://blog.back4app.com/zh/heroku-%E7%9A%84-10-%E5%A4%A7%E6%9B%BF%E4%BB%A3%E5%93%81/)》、《[Heroku vs Railway - Which is the best option?](https://blog.back4app.com/heroku-vs-railway-which-is-the-best/)》—基本上就是希望在 Railway.app 上面進行部署。 ## 百「試」不得其解 相較於在移轉 Render 的時候,要轉部署到 Railway.app 相對遇到比較多的瓶頸。 跟之前[參考的文章](https://blog.user.today/fly-io-asp-net-core-docker-ocr/)一樣,遇到了一樣的錯誤訊息: > Application Error Is your app correctly listening on $PORT? 我百思不得其解,同步的詢問了文章作者,但還是沒有辦法解決我遇到的情況。上網搜尋,發現原來討論 Railway.app 的文章比起 Heroku 跟 Render 真的少很多。英文的資源如是,中文想當然爾更加困難。 幾個小時就這樣過去,經過幾次的部署,就算已經成功將程式碼部署上去,但進去網址的時候,仍會出現同樣的錯誤訊息。 而在設定 LINE Webhook 的時候,會不斷地看到 `503` 的錯誤訊息,意思的就是伺服器並沒有無法被使用,我想應該跟錯誤訊息讓服務無法啟動有關係。 ## 「暫停」換條路徑 剛好手邊有其他的事情要忙錄,就把這件事情先擱一邊了!畢竟花了蠻多時間,看到明明顯示部署完成,卻無法使用,一次次的心情,雖然還不到受挫,但被激起**想要解決問題**的慾望,著實令人感到情緒波動的難受。 幾個小時的沈澱,剛好趁著交通的時間突發奇想,如果真的不行,那就不如砍掉重練。 晚上空出了一段時間後,就開始思考如何砍掉重練這件事情。回憶當初要部署 Render 的時候,當時很幸運網路有人分享文章,這樣的幸運並沒有發生在 Railway.app 上。 畢竟 Railway.app 在 2020 年才推出服務,相對老牌的 Heroku 跟 Render 網路資源的確較為稀少,而且說句真的連官方的說明文件,對我來說都有一點點不明究理,或許他們目標客群都是程式能手,所以文件相對簡化。 換條路徑我把程式重新一段段打上去,還是發現並無助益,一樣面對到相同的情景。心中突然冒出了一句話「砍掉重練」吧! ## 砍掉重練「套模板」 寫程式是這樣的,現在網路發達,許多高手樂於分享,所以對於我們來說並不需要白手起家,網路上有許多模板套用。而以一個 PaaS 的服務提供商,猜想應該多少也會提供相對應的模板。 根據我自己的技術需求跟經驗,LINE Bot 使用 Python 架設,並且透過 Flask 的方式建立 Webhook,自然[打上這兩個關鍵字](https://railway.app/templates?language=python),幸運的找到了[相對的模板](https://github.com/railwayapp-templates/flask)。Railway.app 直接提供部署的功能,可以模板直接部署到你的帳號之中,大概幾分鐘的事情,基礎架構就已經在我的專案中成形。 既然有了基礎架構,我就開始慢慢的轉移。有個小技巧可以分享: _從最簡單的方式開始「蓋房子」。_ 既然我原本的架構,怎麼都無法成行的情況下,那我**從最簡單的部署,一次次的搬移**。在既有的模板之下,先套上 [LINE 提供的模板](https://github.com/line/line-bot-sdk-python/tree/master/examples/flask-echo),然後再一步步的比對自己的跟基礎模板的差異—一個區塊、一個區塊的慢慢複製貼上。 Railway.app 是當你有更新的時候,會自動部署的,所以每一次的變動,基本上都會知道是否成功。 最終找到了關鍵點,就是當使用 `handler` 這個區塊的時候,程式就會跳出上面的錯誤訊息。我其實並不知道為什麼,但是認真研究了一下,看起來新版的範本也已經不用 `handler` 了,既然如此,順勢開始修改自己的程式碼。 至此,在這一個小時之中,重新部署完成我的 LINE Bot。 ## Railway.app 收費方式 Railway.app 基本上有提供免費的方案,我也是今天才剛開始使用,還不知道免費的資源—USD$5 的額度或者 500 小時的使用時間—是否足夠,畢竟今天花在測試跟修改的時間,截至目前已經用掉 12 小時的額度。 但看到他的收費模式,我覺得也是相對合理的,每個月會提供 USD$5 的免費額度,可以升級超過免費額度,可以升級到 Developer 方案。 按照我的理解,應該是 $10 的基本費,如果 8GM RAM 跟 100G 儲存空間超額,就[依照超額的部分增加費用](https://docs.railway.app/reference/plans)。 ~~同時還提供每個人可以推薦分享分潤的機制,在此分享我的分潤連結****,當你透過這個連結申請帳號,我也會獲得 $5 未來如果我要升級 Developer 方案的時候使用。~~