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

```
-----> 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. **スワップファイルを作成**:
   ```bash
   sudo fallocate -l 4G /swapfile
   sudo chmod 600 /swapfile
   sudo mkswap /swapfile
   sudo swapon /swapfile
   ```

2. **永続化設定**:
   再起動後もスワップを有効にするために、`/etc/fstab`にエントリを追加。
   ```bash
   sudo nano /etc/fstab
   ```
   次の行をファイルに追加して保存：
   ```
   /swapfile none swap sw 0 0
   ```
   保存後に適用確認：
   ```bash
   swapon --show
   ```

### **2. Dokkuのビルドパックを設定**
1. **Node.jsとRubyのビルドパックを追加**:
   Node.jsを優先的に処理するため、以下を実行：
   ```bash
   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. **ビルドパック設定の確認**:
   正しく設定されたか確認する：
   ```bash
   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. キャッシュをクリアしてリビルド**
古いキャッシュを削除して再ビルドを試行：
```bash
dokku repo:purge-cache <APP NAME>
dokku ps:rebuild <APP NAME>
```

### **4. デプロイの再実行**
ローカルから再度デプロイを実行：
```bash
git push dokku master
```

---

## **結果**
- スワップの追加と永続化によりメモリ不足が解消。
- Dokkuのビルドパックを正しく設定することで、Node.jsとRubyの依存関係が正常に処理された。
- Railsアプリのデプロイが正常に完了。