2013-03-12 42 views
4

我想在我的一個臨時站點上運行不同的Web服務器,它提供了更多的調試友好的錯誤處理。我想知道如果/如何在不需要在分段和生產部署之間更改Procfile的情況下實現這種操作。Heroku:在暫存站點上運行不同的webserver進程?

我嘗試這樣做:

web: newrelic-admin run-program python manage.py run_gunicorn -b 0.0.0.0:$PORT -w 4 -k gevent 
debug: newrelic-admin run-program python manage.py runserver_plus 0.0.0.0:$PORT --threaded 

然後縮放網頁,以0和調試1,但它現在從this article網絡是一個特殊的保留關鍵字清楚,我就是這樣得到的唯一進程http請求。那麼有沒有辦法來管理這個,而不必維護一個單獨的分支或類似的?

回答

5

當然可以。

如您所見,您需要使用「web」過程類型。

請記住,處理類型的有效剛剛命名的命令:「每個進程類型是當過程類型的測功機啓動時執行的命令的聲明」

您可以控制命令。

在一個小的測試應用程序,我剛剛創建了一個bin目錄,添加的文件,並給它執行權限 - 就像這樣:

mkdir bin 
vi bin/go.sh 
chmod a+x bin/go.sh 

的內容是這樣的:

echo $* 
echo $FOOBAR 
thin --rackup config.ru start $* 

然後我修改了Procfile看起來像這樣:

web: ~/bin/go.sh --port $PORT 

我還添加了一個配置無功到我的應用程序:

heroku上配置:添加FOOBAR = 123

我然後看着日誌開始

2013-03-14T11:49:42+00:00 heroku[web.1]: Starting process with command `~/bin/go.sh --port 47302` 2013-03-14T11:49:43+00:00 app[web.1]: --port 47302 2013-03-14T11:49:43+00:00 app[web.1]: 123 2013-03-14T11:49:44+00:00 heroku[web.1]: State changed from starting to up

優秀之後。你能看到發生了什麼?

  • 當我開始一個Web測功機,Heroku的擡頭幅材工序類型和執行命令
  • 命令開始了我的服務器,但在此之前,它印都發送給它的參數(--port XXX )和FOOBAR環境變量(將由config var設置)

所以我認爲這就是你需要的。只要去寫一個bash腳本,根據一個配置變量,執行一個不同的命令在分期對生產。在分期中,設置配置變種。在生產上,不要。

+0

謝謝,喬恩!說得通。 – 2013-03-14 14:31:54

1

您可以創建一個單獨的Heroku應用程序作爲您的臨時環境,並使用相同的代碼庫(本地git回購)。請參閱Managing Multiple Environments for an App

請注意,您提到的具體任務涉及更改Procfile,因此您可能需要使用分支。在這種情況下,你像這樣推分支(假設多個env按照上述指南):

$ git push heroku-staging <branch_name>:master --app staging_app_name 
+0

總而言之:我的問題的答案似乎是No. – 2013-03-13 16:17:04

+0

答案是「是」,如果您爲Procfile設置了單獨的分支,如上所述進行更改。答案是「否」,如果你只想用你在問題中描述的方法。 – catsby 2013-03-13 18:14:47

+0

啊。我正在考慮在我的問題主體結尾提問的問題,這個問題明確排除了維護一個單獨的分支。但是你在標題中回答了這個問題,我認爲這是合理的。我們現在在同一頁面上 - 感謝回覆!我將不得不考慮是否維護一個獨立的分支並不斷合併/重定義它以更新分段值是值得的(我傾向於不這樣做)。 – 2013-03-13 18:43:15

相關問題