Foreman启动错误(server.rb:33,缺少参数...)

8
尝试启动foreman后,我遇到了这个错误(请注意,它似乎在heroku上可以工作,所以我猜这是一个严格的本地问题):
hrn039:textthechange jon$ foreman start
02:20:00 web.1     | started with pid 7363
02:20:01 web.1     | /Users/jon/.rvm/gems/ruby-1.9.3-p0/gems/railties-3.2.1/lib/rails/commands/server.rb:33:in `parse!': missing argument: -e (OptionParser::MissingArgument)
02:20:01 web.1     |    from /Users/jon/.rvm/gems/ruby-1.9.3-p0/gems/rack-1.4.1/lib/rack/server.rb:280:in `parse_options'
02:20:01 web.1     |    from /Users/jon/.rvm/gems/ruby-1.9.3-p0/gems/rack-1.4.1/lib/rack/server.rb:180:in `options'
02:20:01 web.1     |    from /Users/jon/.rvm/gems/ruby-1.9.3-p0/gems/railties-3.2.1/lib/rails/commands/server.rb:54:in `set_environment'
02:20:01 web.1     |    from /Users/jon/.rvm/gems/ruby-1.9.3-p0/gems/railties-3.2.1/lib/rails/commands/server.rb:42:in `initialize'
02:20:01 web.1     |    from /Users/jon/.rvm/gems/ruby-1.9.3-p0/gems/railties-3.2.1/lib/rails/commands.rb:50:in `new'
02:20:01 web.1     |    from /Users/jon/.rvm/gems/ruby-1.9.3-p0/gems/railties-3.2.1/lib/rails/commands.rb:50:in `<top (required)>'
02:20:01 web.1     |    from script/rails:6:in `require'
02:20:01 web.1     |    from script/rails:6:in `<main>'
02:20:01 web.1     | process terminated
02:20:01 system    | sending SIGTERM to all processes

Procfile 只有一行,如 Heroku 指定的那样

web: bundle exec rails server thin -p $PORT -e $RACK_ENV

我的gemfile文件中有

gem 'thin'

谷歌对这个错误并没有提供太多帮助。

谢谢!


3
你的项目中是否有一个.env文件,并且其中指定了$RACK_ENV变量? - nmott
1
你的Heroku应用程序中是否有RAKC_ENV定义?请使用heroku config命令查询。 - shingara
3个回答

21

这与在Heroku上执行无关 - 原始问题是关于使用Foreman执行的(即本地执行)。

你可以通过执行以下命令来复制你的错误:

rails server thin -e

鉴于你的Procfile,这实际上就是Foreman所运行的内容:

web: bundle exec rails server thin -p $PORT -e $RACK_ENV

因此我猜测你没有传递一个参数给 -e。也就是说,你没有在本地定义 RACK_ENV。

你可以创建一个名为 .env 的文件放在你的本地目录中,像这样:

RACK_ENV=development

PORT=3000

Foreman会自动获取本地的 .env 文件并相应地设置环境变量,然后根据你的进程类型声明创建进程。


2
注意:如果你在生产环境中使用foreman,那么你不想将 .env 文件提交到代码仓库中。在这种情况下,我建议将 .env 添加到你的 .gitignore 文件中(假设你正在使用 git 进行版本控制)。 - Sky

0

我也遇到了同样的问题。如果你只是更改Procfile文件为

web: bundle exec rails server thin -p $PORT

应该可以工作。请注意,这使用默认的Thin端口5000而不是3000(这意味着您需要转到http://localhost:5000才能查看您的应用程序)。

刚刚

web: bundle exec rails server thin

在你的 Procfile 中使用端口 3000,但这会在 Heroku 上引起错误。


0

我在Ubuntu 10.04中使用rails v3.2时遇到了同样的问题。 通过以下步骤,我成功地让thin运行起来:

  1. 将Procfile更改如下:

    web: bundle exec rails server thin -p $PORT -e development

  2. 在config.ru文件顶部添加$stdout.sync = true,以将服务器输出定向到终端(否则您无法在终端中获得输出)

如果可以工作,请告诉我!


1
如果你的 Procfile 中带有 -e development,那么在 Heroku 上它将无法正常工作,应该使用 -e production。你需要使用 -e $RACK_ENV 并在项目目录中的 .env 文件中指定 RACK_ENV=development - nmott

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接