LoginSignup
11
11

More than 5 years have passed since last update.

メモ:Docker上でRailsを動かす時の初期化処理どうする?

Last updated at Posted at 2018-02-14

この記事は

FargateとかeksとかいよいよAWSもDocker全開になってきていいかげんちゃんとサーバで動くDockerfileを模索していた時に、Railsの各種初期化をどうするんだろうと迷った時のメモです

初期化処理諸々

Gemのインストール(bundle install)

  • bundle installはシンプルにビルド時に実行すればOKです
Dockerfile
RUN \
  gem install bundler && \
  echo 'gem: --no-document' >> ~/.gemrc && \
  cp ~/.gemrc /etc/gemrc && \
  chmod uog+r /etc/gemrc && \
  bundle config --global jobs 4 && \
  bundle install && \
  rm -rf ~/.gem

DBスキーマの作成

  • ECSの場合RDSを使うと思うので、そもそも考慮不要です

DBマイグレーション

  • rake db:migrateはDBが起動していないといけないので、ビルド時には実行不可能です
  • 悩みましたがコンテナ起動時にどさくさでmigrationも毎回かけてしまうことにしました
    • ChefベースのOpsworksの標準Railsテンプレートもそんな動きになってた気がするし
Dockerfile
ENTRYPOINT bundle exec rake db:migrate && \
    bundle exec unicorn_rails -E production -c config/unicorn.rb -D && \
    /usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf

asset precompile

  • docker build時にまとめて実行したいところなのですが、rake assets:precompileは動かないというジレンマが・・・
    • これもビルド中はDBサーバが存在しないという制約によります
  • 色々調べていたらThe NullDB Connection Adapter PluginというActiveRecordのモックアダプタを発見、これでいけることがわかりました
Gemfile
gem 'activerecord-nulldb-adapter'
Dockerfile
RUN bundle exec rake assets:precompile DATABASE_URL=nulldb://localhost

終わりに

  • rake assets:precompileとかはそもそもDBに繋がない仕様にしてほしい気がしますね
  • フロントはyarn/reactでSPAみたいな潮流だからもうasset pipelineとかほとんど使わない説もありますが。。
11
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
11