Heroku:Dockerized Rails API部署

时间:2017-01-26 06:47:24

标签: ruby-on-rails heroku docker

我有这个使用Postgresql,Sidekiq(以及Redis)和Puma服务器的Rails 4 API。

我需要将它部署到Heroku,然后按照doc成功部署它。但首先我不知道为什么它告诉我没有运行Web进程。

2010-10-06T21:51:37-07:00 heroku[router]: at=error code=H14 desc="No web processes running" method=GET path="/" host=myapp.herokuapp.com fwd=17.17.17.17 dyno= connect= service= status=503 bytes=

所以我不得不手动打开dyno。

因为那个heroku日志只是告诉我App崩溃了

2010-10-06T21:51:12-07:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=myapp.herokuapp.com fwd=17.17.17.17 dyno= connect= service= status=503 bytes=

由于其他教程,我之前做过的是:

设置config/puma.rb文件

workers Integer(ENV['WEB_CONCURRENCY'] || 2)
threads_count = Integer(ENV['RAILS_MAX_THREADS'] || 5)
threads threads_count, threads_count

preload_app!

rackup      DefaultRackup
port        ENV['PORT']     || 3000
environment ENV['RACK_ENV'] || 'development'

on_worker_boot do
  # Worker specific setup for Rails 4.1+
  # See: https://devcenter.heroku.com/articles/deploying-rails-applications-with-the-puma-web-server#on-worker-boot
  ActiveRecord::Base.establish_connection
end

设置Procfile

web: bundle exec puma -C config/puma.rb

设置app.json

{
  "name": "Cool name",
  "description": "Really meaningful description",
  "image": "heroku/ruby",
  "addons": [
    "heroku-postgresql"
  ]
}

我的docker-compose.yml

web:
  build: .
  command: puma
  ports:
    - "9292:9292"
  links:
    - db
    - redis
  volumes:
    - .:/app_name
  stdin_open: true
  tty: true

sidekiq:
  build: .
  volumes:
    - .:/app_name
  command: bundle exec sidekiq
  links:
    - db
    - redis
  env_file:
    - .env
db:
  image: postgres

redis:
  image: redis

.env档案

REDIS_HOST=redis://redis:6379/0

所以有人可以告诉我什么是wronf我的设置成功部署到Heroku但是无论如何都无法在那里运行?

1 个答案:

答案 0 :(得分:1)

目前,Heroku的基于容器的方法与Docker Compose工作流程并不完全匹配。

您的Dockerfile是什么样的?使用Docker进行部署时,根本不使用Procfile,因此必须在Dockerfile中使用CMD添加start命令。

CMD bundle exec puma -C config/puma.rb

这也意味着要运行Sidekiq,您需要使用不同的CMD构建单独的Docker镜像。您需要在另一个(子)目录中使用第二个Dockerfile,以便使用Heroku的CLI实现此目的。