0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

RailsアプリをDokkuにデプロイ中に発生したYarnエラー

Posted at
-----> 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. サーバーにスワップを追加

  1. スワップファイルを作成:

    sudo fallocate -l 4G /swapfile
    sudo chmod 600 /swapfile
    sudo mkswap /swapfile
    sudo swapon /swapfile
    
  2. 永続化設定:
    再起動後もスワップを有効にするために、/etc/fstabにエントリを追加。

    sudo nano /etc/fstab
    

    次の行をファイルに追加して保存:

    /swapfile none swap sw 0 0
    

    保存後に適用確認:

    swapon --show
    

2. Dokkuのビルドパックを設定

  1. 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
    
  2. ビルドパック設定の確認:
    正しく設定されたか確認する:

    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アプリのデプロイが正常に完了。
0
0
0

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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?