rails commit log流し読み(2022/12/20) - なるようになるブログ を見ていたら、
なんとrails new 時にDockerfileが追加されるようになっていました。
rails newで新規アプリケーション作成時にDocker関連のファイル (Dockerfile、.dockerignore、bin/docker-entrypoint)を生成するよう修正しています。 なお、このDockerfileはproduction向けで、development向けの設定にはなっていません。
Dockerfile.ttを眺めてみる
nodejs
nodejsはnodesourceを利用してinstallしているようです。
<% if using_node? -%> # Install JavaScript dependencies and libvips for Active Storage ARG NODE_MAJOR_VERSION=19 RUN curl -sL https://deb.nodesource.com/setup_$NODE_MAJOR_VERSION.x | bash - RUN apt-get update -qq && \ apt-get install -y build-essential libvips nodejs && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* /usr/share/doc /usr/share/man && \ npm install -g yarn
余談ですが、productionならminor versionまで指定したいので、最近は公式のbinaryを使うようにしています。
RUN curl --compressed "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.xz" > /tmp/node.tar.xz && \ tar -xJf /tmp/node.tar.xz -C /usr/local --strip-components=1 && \ rm /tmp/node.tar.xz
bootsnap
<% if depend_on_bootsnap? -%> # Precompile bootsnap code for faster boot times RUN bundle exec bootsnap precompile --gemfile app/ lib/
これ知らなかったのですが、 Shopify/bootsnap に載ってました。
開発時には自動で使われてるのは知っていたのですが、poductionでも使って良いのか気になります。
Rails Guide辺りに載ってると使いやすいのですが、、、ちょっと躊躇してしまいます。
gemのreadmeに記載されてますが、productionでも使って良さそうです。
SECRET_KEY_BASE_DUMMY
# Precompiling assets for production without requiring secret RAILS_MASTER_KEY RUN SECRET_KEY_BASE_DUMMY=1 bundle exec rails assets:precompile
こちらも新機能ですが、secret_key_base 不要で precompileできるようになってるようです。
良いhttps://t.co/dW6Rfom7jj
— rochefort (@rochefort8) 2022年12月23日
development/test env以外でdummyのsecret key baseを生成出来るよう修正しています。ENV["SECRET_KEY_BASE_DUMMY"]に任意の値を指定した場合に生成されるようになっています。RAILS_MASTER_KEYの指定無しでprodcution向けのassets:precompileを実行出来るようにする為。
おまけ:mainブランチでrails new してみる
実際に最新のmainブランチを使ってrails newする方法です。
git clone https://github.com/rails/rails.git cd rails/ bundle install cd ../ ./rails/railties/exe/rails new edge_rails --edge --dev
これ知りませんでした。便利。