Zenn
Closed55

Rails 8 tutorial をやってみた

Hiroyuki KuromiyaHiroyuki Kuromiya

requirements をみたら早速 ruby の version が古そうだったので最新版を install する

Ruby 3.2 or newer
Rails 8.0.0 or newer
A code editor

Hiroyuki KuromiyaHiroyuki Kuromiya

rbenv の install から

brew install rbenv ruby-build
echo 'eval "$(rbenv init -)"' >> ~/.zshrc
source ~/.zshrc

rbenv list を実行

% rbenv install --list

3.1.6
3.2.6
3.3.6
3.4.1
...
Hiroyuki KuromiyaHiroyuki Kuromiya

rbenv が反映されてなさそうだった

% ruby -v
ruby 2.6.10p210 (2022-04-12 revision 67958) [universal.arm64e-darwin23]
(|orbstack:N/A)[17:57:56] ~
% which ruby
/usr/bin/ruby

PATHを追加

export PATH="$HOME/.rbenv/bin:$PATH"
export PATH="$HOME/.rbenv/shims:$PATH"
eval "$(rbenv init - zsh)"

無事切り替え完了

% which ruby
/Users/hiroyuki/.rbenv/shims/ruby
(|orbstack:N/A)[17:59:20] ~
% ruby -v
ruby 3.4.1 (2024-12-25 revision 48d4efcb85) +PRISM [arm64-darwin23]
Hiroyuki KuromiyaHiroyuki Kuromiya

ディレクトリを漁っていたらそれらしきファイルがあった

% ls storage/
development.sqlite3
Hiroyuki KuromiyaHiroyuki Kuromiya

rails console を起動

% bin/rails console

Loading development environment (Rails 8.0.1)
store(dev)> Rails.version
=> "8.0.1"
store(dev)> exit

なんかちょっといつもの(Rails 7)と違う気がする

Hiroyuki KuromiyaHiroyuki Kuromiya

第七章についてはほとんど知っている知識だったので適当に読み飛ばす

rails console の reload! コマンドは知らなかった(便利)

Hiroyuki KuromiyaHiroyuki Kuromiya

10章まで進めたが、こちらも特に目新しいものはなく

turbo_confirm は初見だったかなぁ

Hiroyuki KuromiyaHiroyuki Kuromiya

いよいよ第11章のAuthentication
ここは Rails 8 になって新しく追加された機能と聞いているので楽しみ

Hiroyuki KuromiyaHiroyuki Kuromiya

言われるがままにこのコマンドを実行

bin/rails generate authentication

何やら22個のファイルが一瞬で生成された

Hiroyuki KuromiyaHiroyuki Kuromiya

言われるがままに最初のユーザーを作成

s3cr3t ってなんだ?と思ったら secret の e を 3 にしたものか

Hiroyuki KuromiyaHiroyuki Kuromiya

authenticated? メソッドや allow_unauthenticated_access メソッドについても学んだ
非常に便利

Hiroyuki KuromiyaHiroyuki Kuromiya

言われるがままにキャッシュを設定

bin/rails dev:cache でキャッシュを有効にしてみる

Read fragment views/products/show:22ce383c7858c442ee839053e869531a/products/1-20250105113710561743 (0.7ms)
Write fragment views/products/show:22ce383c7858c442ee839053e869531a/products/1-20250105113710561743 (1.9ms)

ここの fragment というのがいわゆるcacheのことらしい

Hiroyuki KuromiyaHiroyuki Kuromiya

これが solid cache というものか?と思っていたら、これは process cache と呼ばれるもので solid cache とはまた別物らしい。チュートリアルだと本番環境でのみ solid cacheを使うみたい。

Hiroyuki KuromiyaHiroyuki Kuromiya

続いて13章、Action Text
これは Rails 6 で追加された機能らしい(知らなかった)

Hiroyuki KuromiyaHiroyuki Kuromiya

なんかめっちゃリッチなテキストエディタが追加された

ファイル添付とかもいけるらしい

Hiroyuki KuromiyaHiroyuki Kuromiya

一通り設定したら bin/kamal setup を実行

最初 docker コマンドがないのでインストールします、というメッセージが出てきてあれ、インストールしたはずなのにと思ったが、これはリモートサーバーにdockerコマンドがないという意味だった

Hiroyuki KuromiyaHiroyuki Kuromiya

Ctrl+C でキャンセルしてしまったので kamal lock release を実行して再度やり直す

Hiroyuki KuromiyaHiroyuki Kuromiya

buildの途中で何やらエラーになった

#15 [build 3/6] RUN bundle install &&     rm -rf ~/.bundle/ "/usr/local/bundle"/ruby/*/cache "/usr/local/bundle"/ruby/*/bundler/gems/*/.git &&     bundle exec bootsnap precompile --gemfile
#15 9.991 Fetching gem metadata from https://rubygems.org/.........
#15 16.04 Resolving dependencies...
#15 16.26 Your bundle is locked to rubyzip (2.4) from rubygems repository
#15 16.26 https://rubygems.org/ or installed locally, but that version can no longer be
#15 16.26 found in that source. That means the author of rubyzip (2.4) has removed it.
#15 16.26 You'll need to update your bundle to a version other than rubyzip (2.4) that
#15 16.26 hasn't been removed in order to install.
#15 ERROR: process "/bin/sh -c bundle install &&     rm -rf ~/.bundle/ \"${BUNDLE_PATH}\"/ruby/*/cache \"${BUNDLE_PATH}\"/ruby/*/bundler/gems/*/.git &&     bundle exec bootsnap precompile --gemfile" did not complete successfully: exit code: 7
------
 > [build 3/6] RUN bundle install &&     rm -rf ~/.bundle/ "/usr/local/bundle"/ruby/*/cache "/usr/local/bundle"/ruby/*/bundler/gems/*/.git &&     bundle exec bootsnap precompile --gemfile:
Hiroyuki KuromiyaHiroyuki Kuromiya

rubyzip が見つからないとのことだったので、一度 Gemfile.lock を削除して bundle install

この状態で再度 bin/kamal setup を実行すると無事 bundle install が通った

Hiroyuki KuromiyaHiroyuki Kuromiya

EC2インスタンスは t2.micro という最小スペックのマシンを選んだが、やはりそうなると多少時間はかかるみたいだ

Hiroyuki KuromiyaHiroyuki Kuromiya

今度こそ行けるかと思ったらまたエラー

  Finished all in 385.2 seconds
Releasing the deploy lock...
  Finished all in 389.4 seconds
  ERROR (SSHKit::Command::Failed): Exception while executing on host 43.206.156.132: docker exit status: 1
docker stdout: Nothing written
docker stderr: permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.47/images/create?fromImage=khiroyuki1993%2Fstore&tag=064c837311afdfd48befcfb2d3b02872c6b3359f": dial unix /var/run/docker.sock: connect: permission denied
Hiroyuki KuromiyaHiroyuki Kuromiya

ただし pubic ip をそのまま打っても404しか返ってこない
ドメインをRoute53で管理している場合は ssl の設定が使えるらしいのだが、そうでない場合は /etc/host をいじってみても無理そうだったので ssl: false に設定してみる

Hiroyuki KuromiyaHiroyuki Kuromiya

こんな感じで proxy 全体をコメントアウトし、再度 kamal setup したら見れた

# proxy:
#   ssl: false
#   host: app.example.com

Hiroyuki KuromiyaHiroyuki Kuromiya

HTTP 通信を使っている関係でログインはできなかったが、とりあえず kamal console までは試せた

このスクラップは3ヶ月前にクローズされました
ログインするとコメントできます