错误的文件描述符 - Heroku Foreman
Posted
技术标签:
【中文标题】错误的文件描述符 - Heroku Foreman【英文标题】:Bad File Descriptor - Heroku Foreman 【发布时间】:2013-06-07 18:17:27 【问题描述】:我正在尝试从 this Python Heroku tutorial 运行 hello.py。运行此命令后我的问题开始了:foreman start
。即使我安装了Heroku Toolbelt,我也收到以下错误:
foreman 未被识别为内部或外部命令,可操作 程序或批处理文件
所以我将工头文件(版本 0.63.0)的位置添加到我的 路径:
C:\Program Files (x86)\Heroku\ruby-1.9.2\bin
并重新启动命令提示符并重新运行foreman start
。现在,我收到了这个错误:
Microsoft Windows [Version 6.2.9200]
(c) 2012 Microsoft Corporation. All rights reserved.
C:\Users\me\Desktop\Code\heroku_python_app>venv\Scripts\activate
(venv) C:\Users\me\Desktop\Code\heroku_python_app>foreman start
Bad file descriptor
C:/Program Files (x86)/Heroku/ruby-1.9.2/lib/ruby/gems/1.9.1/gems/foreman-0.63.0
/lib/foreman/engine.rb:372:in `read_nonblock'
C:/Program Files (x86)/Heroku/ruby-1.9.2/lib/ruby/gems/1.9.1/gems/foreman-0.63.0
/lib/foreman/engine.rb:372:in `block (2 levels) in watch_for_output'
C:/Program Files (x86)/Heroku/ruby-1.9.2/lib/ruby/gems/1.9.1/gems/foreman-0.63.0
/lib/foreman/engine.rb:368:in `loop'
C:/Program Files (x86)/Heroku/ruby-1.9.2/lib/ruby/gems/1.9.1/gems/foreman-0.63.0
/lib/foreman/engine.rb:368:in `block in watch_for_output'
12:57:38 web.1 | exited with code 1
12:57:38 system | sending SIGKILL to all processes
(venv) C:\Users\me\Desktop\Code\heroku_python_app>
hello.py
import os
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return 'Hello World'
过程文件
web: gunicorn hello:app
编辑 1
阅读this answer后,我做了以下事情:
gem uninstall foreman
gem install foreman -v 0.61.0
但是,当我重新运行 foreman start
时,我现在遇到了这个错误
(venv) C:\Users\me\Desktop\Code\heroku_python_app>foreman start
14:13:20 web.1 | started with pid 252
14:13:20 web.1 | exited with code 1
14:13:20 system | sending SIGKILL to all processes
14:13:20 | Traceback (most recent call last):
14:13:20 | File "C:\Users\me\Desktop\Code\heroku_python_app\venv\Scri
pts\gunicorn-script.py", line 9, in <module>
(venv) C:\Users\me\Desktop\Code\heroku_python_app>
任何帮助将不胜感激。提前致谢。
【问题讨论】:
你能在没有 Foreman 的情况下从你的 Procfile 运行 web 命令吗? 您的 Procfile 应该包含类似web: something
的行,只需在命令行中键入 something
部分,看看会发生什么。
您找到解决方案了吗?我有完全相同的问题。
+1 @RexE 据我了解,这个问题是由于 Windows 不支持 Gunicorn(我使用的是 Windows XP)导致的,请参阅他们的网站 (gunicorn.org)。但是,我将在 Linux CentOS 上再试一次,并将向您报告。仅供参考,我也尝试在虚拟机中运行 Ubuntu,但是我的系统太慢了,VM 无法正常工作。所以我用 CentOS 双重启动了我的机器,我很快就会重试。另一种选择是创建一个 Amazon EC2 实例并选择他们的一个 Linux AMI 并在那里尝试。
我成功了!我相信它是在我创建 SSH 密钥后开始工作的。
【参考方案1】:
我通过运行以下命令解决了这个问题:
gem uninstall foreman
gem install foreman -v 0.61.0 [EDIT]
正如提到的here。
【讨论】:
以上是关于错误的文件描述符 - Heroku Foreman的主要内容,如果未能解决你的问题,请参考以下文章
Heroku(Cedar) + Node + Express + Jade 子目录中的客户端 javascript 文件在本地与 foreman+curl 一起工作,但在推送到 Heroku 时不能
Foreman start 找不到 Procfile,将 Django 应用程序部署到 Heroku
在当前目录中找不到 Procfile 和 package.json 文件 - 请参阅 run-foreman.js