Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Heroku上部署Ruby Sinatra Web服务器Docker映像_Ruby_Docker_Heroku_Sinatra - Fatal编程技术网

如何在Heroku上部署Ruby Sinatra Web服务器Docker映像

如何在Heroku上部署Ruby Sinatra Web服务器Docker映像,ruby,docker,heroku,sinatra,Ruby,Docker,Heroku,Sinatra,因此,我正在尝试使用Ruby构建一个简单的web服务器,用于个人实践,不使用Rails,将其dockerize并部署到Heroku。但是,当docker映像部署到Heroku上时,总会出现问题。我认为这是因为在Heroku上部署容器应用程序时,需要将DockerFile配置为接收dyno上随机分配的端口,并将其作为$port环境变量公开。即使Docker允许使用EXPOSE来指定图像要使用的端口,Heroku也会忽略这些命令,并选择指定给dyno的端口 那么我该怎么做呢 成功部署docker映像

因此,我正在尝试使用Ruby构建一个简单的web服务器,用于个人实践,不使用Rails,将其dockerize并部署到Heroku。但是,当docker映像部署到Heroku上时,总会出现问题。我认为这是因为在Heroku上部署容器应用程序时,需要将DockerFile配置为接收dyno上随机分配的端口,并将其作为$port环境变量公开。即使Docker允许使用EXPOSE来指定图像要使用的端口,Heroku也会忽略这些命令,并选择指定给dyno的端口

那么我该怎么做呢

成功部署docker映像后单击open app时,Heroku上显示错误消息:

Application error

An error occurred in the application and your page could not be served. If you are the application owner, check your logs for details. You can do this from the Heroku CLI with the command
我的Web服务器有两个功能:用当前IP和当前时间(HTML)响应

我将使用Sinatra。我已成功创建.rb文件:

require 'sinatra'
require 'socket'

#find final_ip
addr_infos = Socket.ip_address_list
final_ip = ''
addr_infos.each do |addr_info|
    final_ip = final_ip + ' ' + addr_info.ip_address
end

#find current time
cur_time = Time.now.ctime

#print to html
get '/' do
    '<h2> Current Time: </h2> <br>' + cur_time + '<br><br>' + '<h2> Current IP Address: </h2> <br>'+ final_ip
end
档案:

# Gemfile
source 'https://rubygems.org'
gem 'sinatra'
gem 'thin'
gem 'puma'
gem 'reel'
gem 'http'
gem 'webrick'
当我在终端上执行命令bundle install和ruby test.rb时,它在localhost:4567上运行得非常好

以下是Dockerfile:

# Dockerfile

FROM ruby:3.0.1

WORKDIR /code
COPY . /code
RUN bundle install

EXPOSE 4567
EXPOSE $PORT

CMD ["bundle", "exec", "rackup", "--host", "0.0.0.0", "-p", "4567"]
构建docker映像并将其部署到Heroku上时没有错误

我不知道如何解决这个问题,因为我对Docker和Heroku这个世界还不熟悉。谁能帮帮我吗?多谢各位

# Dockerfile

FROM ruby:3.0.1

WORKDIR /code
COPY . /code
RUN bundle install

EXPOSE 4567
EXPOSE $PORT

CMD ["bundle", "exec", "rackup", "--host", "0.0.0.0", "-p", "4567"]