错误的文件描述符 - 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

部署到 Heroku 时指定项目根目录

尝试使用 Foreman 在 Gunicorn 上本地运行 Django 应用程序

使用foreman 管理基于Procfile 的应用