【Ubuntu】Rails Precompile ができないときの対処法

さくらVPS Ubuntu22.04 にて、Rails でPrecompile がなかなかできませんでした。そのときにエラー解消した方法を備忘録として残しておきます。

エラー環境
  • さくらVPS
  • Ubuntu22.04
  • Ruby3.1.3
  • Rails 6.1.7.2
  • Node-js 18.14.0
目次

NODE_OPTIONS=–openssl-legacy-providerが必要

Railsプロジェクトを新規作成し、precompileを実行します。

$ cd ~
$ rails new railsSample
$ cd railsSample
$ bundle exec rake assets:precompile RAILS_ENV=production

webpacker 5.4.4 はないと言われました。なので、6.0.0-rc6 をインストールしました

再度、precompileします。

$ bundle exec rake assets:precompile RAILS_ENV=production

↓のエラーが発生しました。

/home/ubuntu/railsSample/node_modules/webpack-cli/bin/cli.js:93
throw err;

TypeError: Cannot read properties of undefined (reading 'toWebpackConfig')
at Object. (/home/ubuntu/railsSample/config/webpack/production.js:5:30)

インストールするwebpacker を5.4.3 に変更して、再度コンパイルしてみました。

$ bundle exec rake assets:precompile RAILS_ENV=production

今度は、別のエラーが発生しました。

~ 略 ~
this[kHandle] = new _Hash(algorithm, xofLen);
~ 略 ~
Error: error:0308010C:digital envelope routines::unsupported

いろいろ調べた結果、↓のコマンドを実行するとエラー解消できました。Node.js のバージョンが17以上だと、環境変数の設定が必要なようです

$ bundle exec rake assets:precompile RAILS_ENV=production NODE_OPTIONS=--openssl-legacy-provider

コンパイルででました。

Built at: 02/23/2023 5:47:52 AM
                                        Asset       Size  Chunks                         Chunk Names
       js/application-3055a888c29068a9ff25.js   68.3 KiB       0  [emitted] [immutable]  application
    js/application-3055a888c29068a9ff25.js.br   15.2 KiB          [emitted]     
    js/application-3055a888c29068a9ff25.js.gz   17.5 KiB          [emitted]     
   js/application-3055a888c29068a9ff25.js.map    203 KiB       0  [emitted] [dev]        application
js/application-3055a888c29068a9ff25.js.map.br   43.2 KiB          [emitted]     
js/application-3055a888c29068a9ff25.js.map.gz   49.9 KiB          [emitted]     
                                manifest.json  364 bytes          [emitted]     
                             manifest.json.br  127 bytes          [emitted]     
                             manifest.json.gz  142 bytes          [emitted]     
Entrypoint application = js/application-3055a888c29068a9ff25.js js/application-3055a888c29068a9ff25.js.map
[3] ./app/javascript/packs/application.js 480 bytes {0} [built]
[4] ./app/javascript/channels/index.js 205 bytes {0} [built]
[5] ./app/javascript/channels sync _channel\.js$ 160 bytes {0} [built]
    + 3 hidden modules
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次