【Rails】Macでの環境構築(エラー対応も)
概要
macOSでRailsの開発作業ができるようにするまでの手順。
macには元からrubyとbundlerが入っているが、バージョン管理をしたいのでrbenvでrubyをインストールしてそちらを適用させる。
あと、途中のrbenv installの時にエラーが出たのでその対応。
環境
macOS Big Sur 11.4
MacBook Air(Retina, 13-inch, 2019)
プロセッサ Intel Core i5
メモリ 8GB
手順
バージョン管理用のrbenvをインストール
rbenvで好きなバージョンのrubyをインストール
gemで好きなバージョンのrailsをインストール
rbenvをインストール
brew install rbenv ruby-build
brew installできたら.bashrcや.zshrcに下記を追記
PATH="$HOME/.rbenv/bin:$PATH" eval "$(rbenv init -)"
.bashrcや.zshrcを再読み込みして(source ~/.bashrc)、rbenv -vでrbenvのバージョンを確認できたらOK
rubyをインストール
rbenvでインストールできるrubyのバージョンを確認する
rbenv install --list 2.6.10 2.7.6 3.0.4 3.1.2 jruby-9.3.6.0 mruby-3.1.0 picoruby-3.0.0 rbx-5.0 truffleruby-22.1.0 truffleruby+graalvm-22.1.0 Only latest stable releases for each Ruby implementation are shown. Use 'rbenv install --list-all / -L' to show all local versions.
今回は一番新そうな3.1.2をインストールする(そこそこ時間かかります)
rbenv install 3.1.2
私はここでエラーが出ました。
これだけ見てもわからないのでログ全文を確認する(/var/folders/....../.log)。
下のスクショはログの前半部分、残りはエラー解決に関係なさそう。
デカデカと表示されているOpenSSL関連に問題がありそう。
インストールされているOpenSSLを確認していく。
$ which openssl /usr/bin/openssl $ openssl version -a LibreSSL 2.8.3 built on: date not available platform: information not available options: bn(64,64) rc4(16x,int) des(idx,cisc,16,int) blowfish(idx) compiler: information not available OPENSSLDIR: "/private/etc/ssl"
LibreSSLとでているが、これはmacOSに標準搭載されているものらしい。
以前、homebrewでインストールした気がするのでそちらの状態も確認する。
$ brew list ==> Formulae autoconf ca-certificates gettext git m4 openssl@1.1 pcre2 pkg-config pyenv rbenv readline ruby-build xz $ brew info openssl@1.1 openssl@1.1: stable 1.1.1q (bottled) [keg-only] Cryptography and SSL/TLS Toolkit https://openssl.org/ /usr/local/Cellar/openssl@1.1/1.1.1m (8,081 files, 18.5MB) Poured from bottle on 2021-12-15 at 23:34:25 /usr/local/Cellar/openssl@1.1/1.1.1q (8,097 files, 18.5MB) Poured from bottle on 2022-07-13 at 12:40:34 From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/openssl@1.1.rb License: OpenSSL ==> Dependencies Required: ca-certificates ✔ ==> Caveats A CA file has been bootstrapped using certificates from the system keychain. To add additional certificates, place .pem files in /usr/local/etc/openssl@1.1/certs and run /usr/local/opt/openssl@1.1/bin/c_rehash openssl@1.1 is keg-only, which means it was not symlinked into /usr/local, because macOS provides LibreSSL. If you need to have openssl@1.1 first in your PATH, run: echo 'export PATH="/usr/local/opt/openssl@1.1/bin:$PATH"' >> ~/.zshrc For compilers to find openssl@1.1 you may need to set: export LDFLAGS="-L/usr/local/opt/openssl@1.1/lib" export CPPFLAGS="-I/usr/local/opt/openssl@1.1/include" For pkg-config to find openssl@1.1 you may need to set: export PKG_CONFIG_PATH="/usr/local/opt/openssl@1.1/lib/pkgconfig" ==> Analytics install: 1,225,966 (30 days), 3,060,362 (90 days), 11,394,164 (365 days) install-on-request: 51,798 (30 days), 122,474 (90 days), 473,105 (365 days) build-error: 1,766 (30 days)
openssl@1.1を使うには色々と環境変数を設定しなければいけないようだ。
まとめて.zshrcに追記してしまう。
export PATH="/usr/local/opt/openssl@1.1/bin:$PATH" export LDFLAGS="-L/usr/local/opt/openssl@1.1/lib" export CPPFLAGS="-I/usr/local/opt/openssl@1.1/include" export PKG_CONFIG_PATH="/usr/local/opt/openssl@1.1/lib/pkgconfig"
.zshrcを読み込んでOpenSSLがどうなったか確認する。
$ which openssl /usr/local/opt/openssl@1.1/bin/openssl $ openssl version -a OpenSSL 1.1.1q 5 Jul 2022 built on: Tue Jul 5 09:08:33 2022 UTC platform: darwin64-x86_64-cc options: bn(64,64) rc4(16x,int) des(int) idea(int) blowfish(ptr) compiler: clang -fPIC -arch x86_64 -O3 -Wall -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DRC4_ASM -DMD5_ASM -DAESNI_ASM -DVPAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DX25519_ASM -DPOLY1305_ASM -D_REENTRANT -DNDEBUG OPENSSLDIR: "/usr/local/etc/openssl@1.1" ENGINESDIR: "/usr/local/Cellar/openssl@1.1/1.1.1q/lib/engines-1.1" Seeding source: os-specific
これでrbenv install 3.1.2をしてもエラーが変わりませんでした。
調べてみると--with-openssl-dirというオプションでrubyをインストールするときのopensslを指定できるらしい。
# ディレクトリは$ which opensslで確認したopenssl@1.1までのパス export RUBY_CONFIGURE_OPTS="--with-openssl-dir=/usr/local/opt/openssl@1.1"
やっとインストールできました。
$ rbenv install 3.1.2 Downloading ruby-3.1.2.tar.gz... -> https://cache.ruby-lang.org/pub/ruby/3.1/ruby-3.1.2.tar.gz Installing ruby-3.1.2... ruby-build: using readline from homebrew Installed ruby-3.1.2 to /Users/otam/.rbenv/versions/3.1.2 $ rbenv versions * system 3.1.2
作業ディレクトリ内で3.1.2を適用する。
$ rbenv local 3.1.2 $ rbenv rehash $ rbenv versions system * 3.1.2 $ ruby -v ruby 3.1.2
railsをインストール
$ gem install rails $ rails -v Rails 7.0.3.1
アプリケーションを作成する。
$ rails new hatena
アプリケーション起動
$ cd hatena $ rails s => Booting Puma => Rails 7.0.3.1 application starting in development => Run `bin/rails server --help` for more startup options Puma starting in single mode... * Puma version: 5.6.4 (ruby 3.1.2-p20) ("Birdie's Version") * Min threads: 5 * Max threads: 5 * Environment: development * PID: 15596 * Listening on http://127.0.0.1:3000 * Listening on http://[::1]:3000 Use Ctrl-C to stop
エラーの対応で結構時間がかかった。
もう深夜3時だ、明日は平日だから問題あるね。
でもエラー解決できたのは嬉しかったからよし。