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)