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

vshtjzan  于 2024-01-08  发布在  其他
关注(0)|答案(1)|浏览(241)

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

  1. setup:
  2. addons:
  3. - plan: heroku-postgresql
  4. as: DATABASE
  5. build:
  6. docker:
  7. web: Dockerfile
  8. config:
  9. RAILS_ENV: production
  10. release:
  11. image: web
  12. command:
  13. - bundle exec rails db:migrate
  14. run:
  15. web: bundle exec rails s -b 0.0.0.0

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

  1. remote: Verifying deploy... done.
  2. remote: Running release command...
  3. remote:
  4. remote: Waiting for release.... failed.


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

  1. release:
  2. image: web
  3. command:
  4. - ./deployment-tasks.sh


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

  1. #!/bin/sh
  2. rails db:migrate


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

其他相关信息:

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

编辑:database.yml编辑:

  1. default: &default
  2. adapter: postgresql
  3. encoding: unicode
  4. # For details on connection pooling, see Rails configuration guide
  5. # https://guides.rubyonrails.org/configuring.html#database-pooling
  6. pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  7. # On docker, host must match service name in docker-compose
  8. host: database
  9. development:
  10. <<: *default
  11. database: portfolio_development
  12. username: <some_username>
  13. password: <some_password>
  14. test:
  15. <<: *default
  16. database: portfolio_test
  17. username: <some_username>
  18. password: <some_password>
  19. production:
  20. <<: *default
  21. database: portfolio_production
  22. username: <some_username>
  23. password: <%= ENV['PORTFOLIO_DATABASE_PASSWORD'] %>
  24. host: localhost

oipij1gg

oipij1gg1#

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

  1. production:
  2. <<: *default
  3. database: portfolio_production
  4. username: <some_username>
  5. password: <%= ENV['PORTFOLIO_DATABASE_PASSWORD'] %>
  6. host: localhost

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

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


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

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


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

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


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

  1. production:
  2. <<: *default
  3. database: <%= ENV['DATABASE_NAME'] %>
  4. username: <%= ENV['DATABASE_USER'] %>
  5. password: <%= ENV['DATABASE_PASSWORD'] %>
  6. host: <%= ENV['DATABASE_HOST'] %>

已编辑

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

  1. $ heroku stack:set container

展开查看全部

相关问题