【问题标题】:Procfile start processes in their own working directoryProcfile 在自己的工作目录中启动进程
【发布时间】:2012-10-28 08:53:09
【问题描述】:

我有这个简单的 Procfile

web: myapp

myapp 在路径中,但进程主目录应该是 ./directory/。如何在 Procfile 中指定进程的启动位置?

https://github.com/ddollar/foreman/pull/101 没有帮助,因为它假定该工作目录对于 Procfile 指定的每个进程都应该是相同的

【问题讨论】:

  • 如果您使用的是gunicornthis post 可能会对您有所帮助

标签: foreman procfile


【解决方案1】:

外壳就是答案。就这么简单

web: sh -c 'cd ./directory/ && exec appname'

【讨论】:

  • 为什么需要 sh -c、引号和点和斜线?你不能只做:web: cd directory && exec appname?
  • 我记得问题是第一个'cd'将在它自己的进程中启动,完成后,它更改的目录将恢复到工头正在运行的位置。使用 'sh' 将生成它自己的环境,此后引号中的所有内容都将继承此环境。
【解决方案2】:

您可以将一组 shell 命令链接在一起。使用当前版本的 Foreman,您无需像 @JohnDoe 的回答那样将其包装在 shell 命令中。

web: cd server_dir && start web_service
clk: cd clock_tower && start timers

这些将从各自的文件夹启动必要的进程并独立跟踪它们。

【讨论】:

  • 我有这个frontend: cd ../frontend/ && npm run client,但它正在当前目录中寻找package.json,而不是我在CD 所在的位置。
  • 您能不能从当前文件夹运行npm run client 而不是进入前端文件夹?
【解决方案3】:

回答“如何在 Procfile 中指定要启动进程的位置?”

您可以告诉 Foreman 应用程序根目录的位置,这意味着它不必与 Procfile 位于同一位置。

您可以使用 -d 选项启动 Foreman(可能还需要在 Procfile 中使用 -f)。

  $ foreman start -d ./directory

http://ddollar.github.io/foreman/

【讨论】:

  • 是的,但是如果同一个Procfile中列出的不同进程有不同的根目录呢?
  • @mattdipasquale 然后在主目录中有一个 Procfile,不同的行如下:service1: foreman start -d ./directory1\n service2: foreman start -d ./directory2
猜你喜欢
  • 1970-01-01
  • 2021-10-18
  • 1970-01-01
  • 2021-12-29
  • 2011-08-14
  • 2017-05-24
  • 2019-10-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多