-----> Installing node-v22.11.0-linux-x64
-----> Installing yarn-v1.22.22
remote: /tmp/tmp.0Z6Wz7gZ8j/lib/ruby/3.1.0/fileutils.rb:541:in `rename': No such file or directory @ rb_file_s_rename - (/tmp/d20241123-204-9s0znu/yarn-v1.22.22, yarn-v1.22.22) (Errno::ENOENT)
remote: /tmp/tmp.sdARwPLAbt/lib/ruby/3.1.0/fileutils.rb:541:in `rename': No such file or directory @ rb_file_s_rename - (/tmp/d20241123-203-mnpgqd/yarn-v1.22.22, yarn-v1.22.22) (Errno::ENOENT)
remote: from /tmp/tmp.sdARwPLAbt/lib/ruby/3.1.0/fileutils.rb:541:in `block in mv'
remote: from /tmp/tmp.sdARwPLAbt/lib/ruby/3.1.0/fileutils.rb:1577:in `block in fu_each_src_dest'
remote: from /tmp/tmp.sdARwPLAbt/lib/ruby/3.1.0/fileutils.rb:1593:in `fu_each_src_dest0'
remote: from /tmp/tmp.sdARwPLAbt/lib/ruby/3.1.0/fileutils.rb:1575:in `fu_each_src_dest'
remote: from /tmp/tmp.sdARwPLAbt/lib/ruby/3.1.0/fileutils.rb:532:in `mv'
remote: from /tmp/buildpacks/01_buildpack-ruby/lib/language_pack/helpers/yarn_installer.rb:27:in `block in install'
remote: from /tmp/tmp.sdARwPLAbt/lib/ruby/3.1.0/tmpdir.rb:96:in `mktmpdir'
remote: from /tmp/buildpacks/01_buildpack-ruby/lib/language_pack/helpers/yarn_installer.rb:22:in `install'
remote: from /tmp/buildpacks/01_buildpack-ruby/lib/language_pack/ruby.rb:611:in `block (2 levels) in install_binary'
remote: from /tmp/buildpacks/01_buildpack-ruby/lib/language_pack/ruby.rb:610:in `chdir'
remote: from /tmp/buildpacks/01_buildpack-ruby/lib/language_pack/ruby.rb:610:in `block in install_binary'
remote: from /tmp/buildpacks/01_buildpack-ruby/lib/language_pack/ruby.rb:599:in `chdir'
remote: from /tmp/buildpacks/01_buildpack-ruby/lib/language_pack/ruby.rb:599:in `install_binary'
remote: from /tmp/buildpacks/01_buildpack-ruby/lib/language_pack/ruby.rb:588:in `block in install_binaries'
remote: from /tmp/buildpacks/01_buildpack-ruby/lib/language_pack/ruby.rb:588:in `each'
remote: from /tmp/buildpacks/01_buildpack-ruby/lib/language_pack/ruby.rb:588:in `install_binaries'
remote: from /tmp/buildpacks/01_buildpack-ruby/lib/language_pack/ruby.rb:96:in `block in compile'
remote: from /tmp/buildpacks/01_buildpack-ruby/lib/language_pack/ruby.rb:930:in `allow_git'
remote: from /tmp/buildpacks/01_buildpack-ruby/lib/language_pack/ruby.rb:90:in `compile'
remote: from /tmp/buildpacks/01_buildpack-ruby/lib/language_pack/rails2.rb:55:in `compile'
remote: from /tmp/buildpacks/01_buildpack-ruby/lib/language_pack/rails3.rb:37:in `compile'
remote: from /tmp/buildpacks/01_buildpack-ruby/lib/language_pack/rails4.rb:30:in `compile'
remote: from /tmp/buildpacks/01_buildpack-ruby/lib/language_pack/rails6.rb:17:in `compile'
remote: from /tmp/buildpacks/01_buildpack-ruby/bin/support/ruby_compile:19:in `block in <main>'
remote: from /tmp/buildpacks/01_buildpack-ruby/lib/language_pack/base.rb:144:in `log'
remote: from /tmp/buildpacks/01_buildpack-ruby/bin/support/ruby_compile:18:in `<main>'
! No such file or directory @ rb_file_s_rename - (/tmp/d20241123-203-mnpgqd/yarn-v1.22.22, yarn-v1.22.22)
!
remote: ! Failure during app build
remote: ! Retagging old image ce929f008baf
remote: 3ddde538fbee as dokku/<APP NAME>:latest
remote: ! App build failed
問題概要
-
現象: RailsアプリをさくらのVPS(Ubuntu)上に構築したDokkuにデプロイ中、
yarn
のインストールが失敗し、Errno::ENOENT: No such file or directory
エラーが発生。
今まで同じ手順でデプロイできていたけど、2024年11月にできなくなった。なんかのアップデートが入ったのかしら。 -
原因:
- デプロイ時に一時的にDokkuのメモリ不足(スワップ未設定)になっていたような挙動があった。
- Dokkuのビルドパック設定が不完全で、Node.js関連の依存関係が正しく処理されていなかった。今までは自動でRuby app Detectedという表示がデプロイ時にあったけど、明示的にRuby appであることを表示する必要があったかも。
解決手順
1. サーバーにスワップを追加
-
スワップファイルを作成:
sudo fallocate -l 4G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile
-
永続化設定:
再起動後もスワップを有効にするために、/etc/fstab
にエントリを追加。sudo nano /etc/fstab
次の行をファイルに追加して保存:
/swapfile none swap sw 0 0
保存後に適用確認:
swapon --show
2. Dokkuのビルドパックを設定
-
Node.jsとRubyのビルドパックを追加:
Node.jsを優先的に処理するため、以下を実行:dokku buildpacks:add --index 1 <APP NAME> https://github.com/heroku/heroku-buildpack-nodejs.git dokku buildpacks:add <APP NAME> https://github.com/heroku/heroku-buildpack-ruby.git
-
ビルドパック設定の確認:
正しく設定されたか確認する:dokku buildpacks:list <APP NAME>
返答結果:
-----> <APP NAME> buildpack urls https://github.com/heroku/heroku-buildpack-nodejs.git https://github.com/heroku/heroku-buildpack-ruby.git
3. キャッシュをクリアしてリビルド
古いキャッシュを削除して再ビルドを試行:
dokku repo:purge-cache <APP NAME>
dokku ps:rebuild <APP NAME>
4. デプロイの再実行
ローカルから再度デプロイを実行:
git push dokku master
結果
- スワップの追加と永続化によりメモリ不足が解消。
- Dokkuのビルドパックを正しく設定することで、Node.jsとRubyの依存関係が正常に処理された。
- Railsアプリのデプロイが正常に完了。