在开发和生产中使用不同的Procfile

我有一个自制的Sinatra应用程序,我打算使用Heroku来托pipe它。

我在开发中使用工头和霰弹枪,使用以下Procfile:

web: shotgun config.ru -s thin -o 0.0.0.0 -p $PORT -E $RACK_ENV 

这对于开发和生产都很有效。 但事情是, 我不想在生产中使用霰弹枪,因为它太慢了。

我们可以为dev和prod使用单独的Procfileconfiguration吗?

您可以使用两个Procfiles (例如ProcfileProcfile.dev )并使用foreman-f选项来select一个不同的在dev中使用:

在开发( Procfile.dev包含你的shotgun Web进程):

 foreman start -f Procfile.dev 

在生产中, foreman startforeman start正常的Procfile

或者,您可以使用脚本在您的应用程序中创build一个bin目录,以根据$RACK_ENV (我在Foreman的创build者发表的评论中发现的一个想法,因此值得考虑)启动相应的Web服务器。

这是用一个Procfile和环境variables来处理的方法。 我在Heroku上使用这个。

设置您的环境:

 export WEB_START_COMMAND='node index.js' export WORKER_START_COMMAND='node worker.js' 

Procfile:

 web: eval '$WEB_START_COMMAND' worker: eval '$WORKER_START_COMMAND' 

在服务器和开发环境中导出不同的启动命令。