Heroku中“Procfile声明类型->(无)”的原因是啥?

Posted

技术标签:

【中文标题】Heroku中“Procfile声明类型->(无)”的原因是啥?【英文标题】:What is the reason for "Procfile declares types -> (none)" in Heroku?Heroku中“Procfile声明类型->(无)”的原因是什么? 【发布时间】:2011-09-14 19:55:35 【问题描述】:

我正在尝试将测试应用程序部署到 Heroku --stack cedar,但每次执行时我的 Procfile 都会被忽略。

应该是这样说的:

Procfile declares types -> web

但是这样说

Procfile declares types -> (none)

由于这个问题,当我浏览 URL 时,它当然不会在 heroku 平台上加载。

除了这个测试 (A) 我在另一个文件夹中有一个相同的项目 (B) 可以工作。我非常困惑为什么(A)不我现在来这里问。

我用 (A) 尝试过的其他几件事包括:

重新创建 heroku 应用程序 重新创建 git 存储库(即删除 .git、git init...) 从项目文件夹中清除文件,并从另一个有效的副本中复制文件

如果我制作 (B) 的***文件夹副本,那么该副本将起作用。问题似乎是将文件/文件夹从(B)等复制到(A)内,被诅咒的。

所以,到目前为止,我所能确定的是,减去这个 (A) 被诅咒的文件夹后一切正常。我很想找出原因,而不必得出巫术的结论。

【问题讨论】:

检查了你的 .gitignore 文件? 嗨 Andre,我在 .gitignore 中只有这个文本:“node_modules” 【参考方案1】:

就我而言,我有多模块项目。我已将 Procfile 放入服务器模块(这是唯一打算在 heroku 上运行的模块),但 Heroku 在根项目目录中搜索它(上一级)。

【讨论】:

【参考方案2】:

注意Procfile的命名和位置(https://devcenter.heroku.com/articles/procfile) Procfile 始终是一个名为 Procfile 的“简单文本文件”没有文件扩展名。(Procfile.txt 不可接受!)

Procfile 必须位于应用的根目录中。如果放在其他任何地方,它就不起作用。

【讨论】:

【参考方案3】:

确保您没有为 Procfile 提供任何扩展名。我做了并得到了类似的错误。还要检查语法。例如:

web : sh setup.sh 应该是

网页:sh setup.sh

【讨论】:

【参考方案4】:

我遇到了同样的问题,并尝试了此处发布的所有内容。我得到了:

Procfile declares types -> (none)

而不是 Procfile 声明类型 -> web. 我的解决方法是将 regedit 更改为 0(此处为教程 https://www.thewindowsclub.com/show-file-extensions-in-windows),然后删除 Procfile 末尾的 .txt(所以它只是一个没有扩展名的文件)。之后我的问题就解决了!您可以检查您是否已经解决了在cmd中执行以下命令:

heroku ps 

应该显示如下内容:

=== web (Free): gunicorn app:app (1)

或者 git push:

git push heroku master

应该显示:

Procfile declares types -> web

【讨论】:

【参考方案5】:

我在将 Django 应用程序部署到 Heroku 时遇到了这个问题。

git 存储库必须在 Django 项目根文件夹中初始化(manage.py 所在的位置) 这也是Procfile 需要坐的地方

文件结构:

Documents/
|---djangoprojectname/
|   |---djangoprojectname/
|   |   |---__init__.py
|   |   |---settings.py
|   |   |---urls.py
|   |   |---wsgi.py
|   |---djangoappname/
|   |---.git
|   |---manage.py
|   |---Procfile

Procfile 按照docs 应该是这样的:

web: gunicorn djangoprojectname.wsgi

【讨论】:

【参考方案6】:

我遇到了这个错误并尝试了上述所有解决方案,但它们都不起作用。原来我已经在虚拟环境的根目录中创建了 git 存储库。这似乎是鲁莽的,但嘿......

因此,如果您尝试了所有解决方案但它们都不起作用,请检查您创建存储库的位置并确保它位于项目源代码的根目录中,而不是其他任何位置。

【讨论】:

【参考方案7】:

这个问题主要是从命令提示符或终端运行 create Procfile 命令引起的。我建议您手动创建 Procfile。

如果您使用的是 Visual Studio 代码,请单击 pipfile,然后在上方单击 create new file 按钮并输入文件名称为 Procfile

在执行此操作之前,请删除以前的 Procfile,并在您的活动虚拟环境中的命令提示符中使用命令 git rm procfile -f

如果您使用任何其他 IDE,请打开记事本并在其中输入此行 网络:gunicorn mb_project.wsgi --log-file - 之后将其保存为 Procfile 并将此文件放在您的 pipfile 下方。

这是我的文件链接https://github.com/YashMarmat/message-board-app.git

【讨论】:

【参考方案8】:

关于“Procfile 声明类型 -> (none)”错误,我有话要说。

我们应该注意的一点是“Procfile”文件的隐藏扩展名。我认为我在“Procfile”中的命令是正确的,但我一直收到这个错误。半小时后,我发现“Procfile”的扩展名为“.txt”,但被我的 macOS 的默认设置隐藏了。删除扩展后,一切正常!

【讨论】:

【参考方案9】:

我要添加到 Pascal Lindelauf 的答案 - 确保您的文件名是“Procfile”(大写 P)而不是“procfile” (我刚才也是这样) 祝你好运!

【讨论】:

【参考方案10】:

你还记得将Procfile 提交给 git 吗?我忘了做这个提交,做了一个git push heroku master,看到了上面提到的(none)消息。

如果您忘记了,请提交您的Procfile 并再次执行git push heroku master

【讨论】:

【参考方案11】:

确保您的 Procfile 没有任何扩展名。如果有任何扩展名,您必须将该文件重命名为 Procfile 而没有任何扩展名并提交并签出主文件

【讨论】:

【参考方案12】:

记录名称和内容之间的空格似乎很重要:

用途:

web: python manage.py runserver

而不是

web:python manage.py runserver

【讨论】:

【参考方案13】:

我遇到了同样的问题,我刚刚发现了问题所在。我第一次不小心调用了文件ProcFile 而不是Procfile。简单地重命名该文件并没有被 git 拾取。我必须先做一个git rm ProcFile -f,然后添加一个新的(正确命名的)Procfile。之后,它被git正确推送并被Heroku正确拾取。

【讨论】:

谢谢..!这节省了我几个小时..! 非常感谢。我的问题有点不同。我使用的是 OSX,我可以看到我的 Procfile 文件完全称为“Procfile”。但仍然未能部署。在我运行“git rm Procfile -f”之后,它返回了“rm 'procfile'”。我不知道为什么如果显示“P”(大写)而不是“p”。但是在我手动重新创建“配置文件”之后,它开始工作了。我建议发生错误的原因是什么,我们可以删除并重新创建“Procfile”文件。它就像一个魅力。 非常感谢,我知道这是旧的。但我仍然面临这个奇怪的问题。 @Pascal Lindelauf 兄弟,你是个救援者! 这救了我。将 procFile 重命名为 Procfile 并没有被 git 接受。也许您可以通过'git ls-files'添加到答案以检查文件的真实名称,然后我就清楚了。

以上是关于Heroku中“Procfile声明类型->(无)”的原因是啥?的主要内容,如果未能解决你的问题,请参考以下文章

heroku 在构建脚本中失败,但 heroku 本地网络很好

如何设置 Heroku 配置文件,使其在 Heroku 部署的任何终端问题中接受“是”

从 heroku slugs 中排除 gems 中的文件(使用 .slugignore、heroku)

一个 Heroku 应用程序中的两个进程与两个 Heroku 应用程序

如何在 Heroku 中卸载此 buildpack?

heroku 版本在 ubuntu 14.04 中执行命令“heroku 版本”时给出错误“错误:EOF”?