如何使用Procfile和Foreman来运行Rails服务器和机器人?

5
我正在尝试使用Procfilegem'foreman'将我的rails服务器slackbot在两个进程中运行。但是当我使用foreman start时,机器人正在运行,服务器没有启动。我尝试删除bot这一行并尝试仅运行web,但在这种情况下,我的服务器也没有启动,它只显示started with pid 1502。但是当我从另一个终端使用rails s启动它时,它可以正常启动。我已经谷歌了很多,似乎找不到解决方案。非常感谢您的帮助。谢谢。
这是我的Procfile:
web: bundle exec rails server -p $PORT
bot: rails runner -e development slackbot/slack.rb

你正在运行什么样的foreman命令? - Kris
@Kris foreman start - Amal
当我尝试从Postman触发API时,它会返回一个错误无法从服务器获取任何响应 - Amal
你确定使用的是正确的端口吗?尝试在Procfile中将其硬编码。 - Kris
我尝试了bundle exec rails server -p 3000,但问题仍然存在。 - Amal
显示剩余3条评论
2个回答

2

看起来你可能需要指定端口,可以设置环境变量PORT

export PORT=3000
foreman start

或者在Procfile中硬编码端口:

web: bundle exec rails server -p 3000

或者删除-p选项,这样将使用默认端口:
web: bundle exec rails server

当我在开发中硬编码端口3000时,它能够正常工作,但是当我将其推送到Heroku上时,它无法启动。Heroku是否使用不同的端口来运行应用程序? - Amal
抱歉,我不知道。那是一个不同的问题。 - Kris
我刚刚使用了-p $PORT,Heroku选择了他们想要的端口,现在一切都很好,谢谢。 - Amal
我猜测Heroku设置了PORT环境变量。 - Kris
是的,我只是在问题出现之前尝试修复它。 - Amal

0

请尝试以下配置:

web: bundle exec rails server -p 3000
bot: rails runner -e development slackbot/slack.rb

然后运行foreman start -f Procfile(或您添加的文件名)

访问:http://localhost:3000

通常,我喜欢使用screen命令在后台打开foreman进程,但这里不需要...它看起来像:screen foreman start -f Procfile然后我只需点击ctrl + A + D进行分离,进程将在后台运行。这对于SSH连接(例如EC2实例)非常有用。


我的服务器在硬编码3000时运行正常,但在Heroku上应用程序无法工作。我猜Heroku使用不同的端口来托管应用程序,你知道是哪个端口吗? - Amal

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