【问题标题】:Heroku Procfile not workingHeroku Procfile 不工作
【发布时间】:2015-06-11 10:54:48
【问题描述】:

我正在尝试使用 Nginx + Phalcon。所以我有根文件夹 (app) 和我的公共文件夹 (app/public)。

在根(应用程序)内我有 Procfile:

web: vendor/bin/heroku-php-nginx -C nginx_app.conf public/

在我的公用文件夹中,我有我的 index.php

<?php exit('hello');

通过这个简单的例子,当我访问 url myapp.herokuapp.com 时不应该打印 hello 吗?

如果我的想法是正确的,那是行不通的。我的第二个问题是 nginx_app.conf 似乎没有被服务器读取。因为我尝试访问的每个 f* 页面都得到了 404。

那么,我做错了什么?

[更新]

这是日志:

heroku[web.1]: State changed from down to starting
heroku[web.1]: Starting process with command `php -S 0.0.0.0:57262`
heroku[web.1]: State changed from starting to up
app[web.1]: [Tue Apr  7 11:08:07 2015] 10.185.81.31:28258 Invalid request (Unexpected EOF)
app[web.1]: [Tue Apr  7 11:08:07 2015] 172.19.28.141:33686 Invalid request (Unexpected EOF)
heroku[router]: at=info method=GET path="/" host=myapp.herokuapp.com request_id=d39f119a-fd95-4887-809f-74712925606f fwd="200.221.158.131" dyno=web.1 connect=2ms service=4ms status=404 bytes=668
app[web.1]: [Tue Apr  7 11:08:44 2015] 10.61.196.230:38679 [404]: / - No such file or directory

[更新]

$ git push ...
[...]
remote: -----> Discovering process types
remote:        Procfile declares types -> web

$ heroku run bash
$ cat Procfile
~ $ : vendor/bin/heroku-php-nginx public/~ $

根据documentation应该是

heroku run bash
Running `bash` attached to terminal... up, run.5662
$ cat Procfile
web: vendor/bin/heroku-php-apache2

我尝试过的一个小细节:

cat Procfile
~ $ vendor/bin/heroku-php-nginx public/c/~ $
vendor/bin/heroku-php-nginx public/
DOCUMENT_ROOT changed to 'public/'
Optimzing defaults for 1X dyno...
4 processes at 128MB memory limit.
Starting php-fpm...
Starting nginx...

我在等……让我们看看会发生什么

【问题讨论】:

  • 测功机启动后heroku logs的输出是什么?
  • 嘿!请参阅上面的更新。
  • cat -v Procfile 在测功机上给你什么?
  • 同样的事情:$ vendor/bin/heroku-php-nginx public~ $

标签: heroku procfile


【解决方案1】:

您的Procfile 有问题;如您所见,Heroku 以默认的php -S 模式启动。当Procfile 存在但没有声明“web”进程类型时会发生这种情况;这也应该写在git push heroku master 末尾的消息中(关于Procfile 没有声明“web”进程类型,然后使用默认值)。

这排除了您的 Procfile 未被签入 Git 或名称错误(例如小写 procfile)。

罪魁祸首很可能是您使用的编辑器在文件开头插入的 Unicode 字节顺序标记:https://en.wikipedia.org/wiki/Byte_order_mark#UTF-8

所以你的Procfile 看起来不像这样:

web: vendor/bin/heroku-php-nginx -C nginx_app.conf public/

但实际上是这样的:

\0xEF\0xBB\0xBFweb: vendor/bin/heroku-php-nginx -C nginx_app.conf public/

您的编辑器(以及大多数编辑器)根本不显示 BOM。

要解决此问题,请在没有 BOM 的情况下保存您的 Procfile(并且,在您使用它时,将您的编辑器配置为从不保存 UTF-8 BOM,因为非常不鼓励使用它并导致无数这样的问题一)。

【讨论】:

  • 我同意我的 Procfile 有问题,但请看我上面的下一次更新。
  • 只是为了结束这个问题,首先这是一个好主意。我的文件不是 BOM,而是 UTF8,此时我不确定这是否是问题所在,但我更改为 ANSI。其次,我还在 bash 上执行了 Procfile 行。所以这两件事对我有用。谢谢大家。
  • 那么现在它工作正常了吗?测功机中的cat Procfile 现在是否显示正确的内容,前面有“web:”?如果是这样,那么也许这确实是您的系统/Git/编辑器的问题......
  • 其实我没有检查 cat Procfile,但我会的。我用的是notepad++,从来没遇到过这种问题,真不知道怎么回事。
猜你喜欢
  • 1970-01-01
  • 2021-08-12
  • 1970-01-01
  • 2019-03-25
  • 2016-12-15
  • 1970-01-01
  • 2019-10-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多