Heroku发布阶段失败,没有错误或日志

vshtjzan  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(195)

我正试图将Docker添加到我的一个旧项目中,并将其作为dockerized版本托管在Heroku上。我已经在本地安装并运行了Docker和docker-compose。我在将其推到Heroku上时遇到了障碍。
我将大部分docker-compose命令移到一个heroku.yml文件中,如下所示:

setup:
  addons:
    - plan: heroku-postgresql
      as: DATABASE
build:
  docker:
    web: Dockerfile
  config:
    RAILS_ENV: production
release:
  image: web
  command:
    - bundle exec rails db:migrate
run:
  web: bundle exec rails s -b 0.0.0.0

字符串
然而,每当我把这个推到Heroku时,我得到了一个成功的构建,但一个失败的发布:

remote: Verifying deploy... done.
remote: Running release command...
remote:
remote: Waiting for release.... failed.


我也试过将release命令移到另一个文件中,然后像这样运行:

release:
  image: web
  command:
    - ./deployment-tasks.sh


deployment-tasks.sh文件内容如下所示:

#!/bin/sh

rails db:migrate


Heroku的发布日志总是空的。我已经在这几天了,似乎不能弄清楚我在这里做错了什么。任何帮助都将不胜感激!
此外,如果有人能告诉我如何快速升级和测试这个,而不必每次推到Heroku时重新构建我的应用程序,这将是一个巨大的奖励,因为它的情况下,我必须等待~5-10分钟,每次推,看看是否对heroku.yml的更改工作或不工作。🙏🏽

其他相关信息:

  • Docker基础镜像:ruby:2.7-alpine3.14
  • Rails版本:6.0.6.1

编辑:database.yml编辑:

default: &default
  adapter: postgresql
  encoding: unicode
  # For details on connection pooling, see Rails configuration guide
  # https://guides.rubyonrails.org/configuring.html#database-pooling
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  # On docker, host must match service name in docker-compose
  host: database

development:
  <<: *default
  database: portfolio_development
  username: <some_username>
  password: <some_password>

test:
  <<: *default
  database: portfolio_test
  username: <some_username>
  password: <some_password>

production:
  <<: *default
  database: portfolio_production
  username: <some_username>
  password: <%= ENV['PORTFOLIO_DATABASE_PASSWORD'] %>
  host: localhost

oipij1gg

oipij1gg1#

根据你更新的帖子,很明显是什么导致了发布阶段的失败。
这里的问题是您设置了不正确的DB配置值:

production:
  <<: *default
  database: portfolio_production
  username: <some_username>
  password: <%= ENV['PORTFOLIO_DATABASE_PASSWORD'] %>
  host: localhost

字符串
为应用购买Heroku Postgres插件后,Heroku会生成一个DATABASE_URL env var,您可以在应用的Config Vars中查看。格式如下:

postgresql://<user>:<password>@<host>/<dbname>


你也可以在你的postgres插件中的资源标签下找到这个值。下面是一个例子:

postgresql://user1:admin123@localhost:3000/mydb


这是连接到数据库所需的内容。您可以更改database.yml的配置以使用url密钥:

production:
  adapter: postgresql
  encoding: unicode
  url: <%= ENV.fetch("DATABASE_URL") %>
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>


或者保持与现在相同的设置。但是,请通过Config Vars设置值。不建议在代码中手动设置值:

production:
  <<: *default
  database: <%= ENV['DATABASE_NAME'] %>
  username: <%= ENV['DATABASE_USER'] %>
  password: <%= ENV['DATABASE_PASSWORD'] %>
  host: <%= ENV['DATABASE_HOST'] %>

已编辑

另一件你应该检查的事情是你的Heroku堆栈。因为你正在对你的应用进行dockerizing,所以确保它配置了container堆栈。你可以通过Heroku CLI设置它:

$ heroku stack:set container

相关问题