LoginSignup
0

More than 1 year has passed since last update.

【Rails/Heroku】「`write': No such file or directory @ rb_sysopen - tmp/pids/server.」または、用意したのにYour app does not include a heroku.yml に陥った時

Posted at

やりたいこと

  • GithubのRepoのmainブランチにマージされたら、Herokuにデプロイされて欲しい
  • Docker上で動かしているので、ビルドなどもしてほしい

起こったことと対応

公式によると、heroku.ymlを用意する必要があるとのことだったので、サンプル通りに用意しました。

heroku.yml
build:
  docker:
    web: Dockerfile
run:
  web: bundle exec puma -C config/puma.rb

heroku.yml を使用して Docker イメージをビルドする | Heroku Dev Center
https://devcenter.heroku.com/ja/articles/build-docker-images-heroku-yml

これでOKと思ってデプロイしたところ、

/usr/local/bundle/gems/puma-5.6.5/lib/puma/launcher.rb:259:in
`write': No such file or directory @ rb_sysopen - tmp/pids/server.pid (Errno::ENOENT)`

というエラーがHerokuで発生。
調査の結果、tmp/pidsディレクトリができていないとのことだったので、下記のように修正しました。

heroku.yml
build:
  docker:
    web: Dockerfile
run:
  web: mkdir -p tmp/pids && mkdir -p tmp/sockets && bundle exec puma -C config/puma.rb

よし、今度こそ...と思ったら、次はこちらでビルドに失敗します。

=== Fetching app code
=!= Your app does not include a heroku.yml build manifest. 
To deploy your app, either create a heroku.yml: https://devcenter.heroku.com/articles/build-docker-images-heroku-yml
Or switch back to buildpack-based deploys: https://devcenter.heroku.com/articles/container-registry-and-runtime#changing-deployment-method

いや、今まさに作ったんだが?

ということでしばらく悩んだのですが、原因がわかりました。

自分のプロジェクトは下記のような構成で、フロントとバックをそれぞれ別のプラットフォームにデプロイしています。

project
├── .git
├── backend
├── docker-compose.yml
└── frontend

それで、backendだけをherokuにデプロイしているので、この中でheroku.ymlを作成していました。
これがHeroku側から参照できていないのかな...?と思い、以下のように構成を変えました。

project
├── backend
├── docker-compose.yml
├── frontend
└── heroku.yml

Dockerfileも一階層下を見にいくようにします。

heroku.yml
build:
  docker:
    web: backend/Dockerfile
run:
  web: mkdir -p tmp/pids && mkdir -p tmp/sockets && bundle exec puma -C config/puma.rb

これでデプロイしたら、無事ビルドされました...!
Docker側の設定で、Heroku.ymlの場所を指定するとかもあるかなと思ったのですが、見当たらなかったのでルートに配置した次第です。

誰かのためになれば幸いです。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0