簡體   English   中英

如何使用Sinatra作為服務運行Ruby應用程序

[英]How do I run a Ruby app using Sinatra as a service

我知道這個問題已經被問過很多次,並且已經閱讀了有關該主題的所有問答,但是我仍然很困惑。

我是Ruby初學者,試圖通過Sinatra和Strava構建(由他人)構建的Ruby應用程序,以在Linux中作為服務運行。 這是處理Transifex語言翻譯與github同步的網關。 我已經分叉了原始代碼並修復了許多錯誤,以至於現在它可以正常工作了。 我的倉庫在這里:

https://github.com/Fabrik/txgh

原始文檔僅顯示了如何使用“ bundle exec rackup”從命令行運行它。 我嘗試通過簡單地從rc.local后台啟動bundle命令來進行守護進程,但這不起作用。 我對使用捆綁軟件不是很虔誠,因為它在專用的小型Amazon ECS實例上運行,並且我不會在其上安裝任何其他Ruby,因此不會存在版本問題。 因此,不使用捆綁軟件的解決方案很好。

我猜答案可能是使用“守護程序” gem,我已經嘗試過了,但是一無所獲。

如果有人可以看一下該github倉庫,並指出正確的方向,我將不勝感激。 我發誓我已盡力而為,並花了許多小時進行谷歌搜索和試驗!

UPDATE

自發布以來,Transifex的作者開始研究此txgh網關的開發,合並了我需要的更改,並對其進行了調整以使其能夠在Heraku上運行。 任何需要在github和Transifex之間建立網關的人都應該在這里:

將Transifex與GitHub集成的服務器

編輯

盡管我懷疑這是一個很好的答案,但這是測試正在發生的事情的好方法...

我相信,一旦容器的主進程(Amazon 實例 )完成,就會有一個關閉和清除進程,該進程會終止該服務,將其置於“睡眠”狀態,直到再次需要它為止。

我認為這實際上是與系統“彈性”方面相關的“功能”,就像Heroku在“自動縮放”時動態關閉Dynos一樣。

為了驗證該理論,將服務設置為在后台運行后,請在前台啟動其他應用程序(這樣主進程仍處於活動狀態並掛起)。

即:

# do whatever you need to setup the service, i.e.:
bundle exec rackup &
# hang the main process for infinity:
ruby -e "sleep"

如果您的服務無法像以前那樣關閉,我可以肯定地說,亞馬遜將您拒之門外是最主要的問題。

當主進程“繁忙”時,我希望您的服務關閉會花費更長的時間。 不過,我假設所有服務在未收到請求時都會關閉,因此我懷疑任何“彈性”容器都將永遠存在。

原來的答案,當我還不明白這個問題時

我可能不太了解您的問題...但是...

您可能可以在命令末尾使用&符號在后台運行進程(這是unix / linux操作系統)。

嘗試:

bundle exec rackup &

另一個問題是……為什么? 為什么不讓服務器作為主要的Docker容器服務運行? 為什么要妖魔化該應用程序?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM