Railsプロジェクトでまず最初にやっておきたい設定
弊社ではサーバーサイドにRuby on Railsを使っているアプリケーションが多いのですが、まず最初にやっている(ことが多い)設定について簡単にまとめてみました。
開発環境
アセットへのアクセスログを非表示
アセットへのアクセスログは煩わしいので非表示にします。
Rails 4以前ではquiet_assets gemをGemfileに追加します。Rails 5では config/environments/development.rb
に
config.assets.quiet = true
を記述しておけば良いようです。
Bullet
N+1問題を検出するため、bullet gemをGemfileに追加します。
RuboCop
ソースコードのスタイルチェックを実行するため、rubocop gemをGemfileに追加します。
ログのローテーション
開発環境のログはずっと残っている必要はないので、開発環境は5世代まで保存するようにしてローテーションさせたりします。config/environments/development.rb
に以下の設定をします。
config.logger = Logger.new("log/development.log", 5, 1 * 1024 * 1024)
本番環境
ログのローテーション
本番環境はデイリーでローテーション。config/environments/production.rb
に以下の設定をします。
config.logger = Logger.new('log/production.log', 'daily')
また、Fluentdなどでログを転送する場合には、ずっと残しておく必要はないため、開発環境と同じような設定にします。
アセットをAWS S3に配置
JSやCSSのアセットはアプリケーションサーバではなく、S3に配備して、S3もしくはCloudFrontから配信することでページロードを高速化し、アプリケーションサーバの負荷を減らします。
asset_sync gemをGemfileに追加します。
タイムゾーン・ロケールの変更
基本的に日本を対象としたサービスが多いため、以下の設定をconfig/application.rb
に入れます。
config.time_zone = 'Tokyo'
config.i18n.default_locale = :ja
アプリケーションの例外検知
airbrake gemをGemfileに追加します。
その他、サーバ側にAirbrakeサービスまたはErrbitが必要ですが、そこの手順は色々な方が書いているため省略いたします。
アプリケーションの性能監視
newrelic gemをGemfileに追加します。
その他NginxやUnicornなどのミドルウェアの設定
ミドルウェアとしてはNginx, Unicornを使うことが多く、非常にざっくりですが、行う設定を箇条書きで洗い出してみたいと思います。
Nginx
- Unicornとの通信をUNIXドメインソケット通信にする
- HTTPSを強制するため、Strict-Transport-Securityのレスポンスヘッダ追加
- Nginxのレスポンスにバージョン情報を含めないようにする
- CORS対応 (必要に応じて)
- Workerプロセス数の調整
- Unicornとの各種タイムアウト値の調整
Unicorn
- Unicornとの通信をUNIXドメインソケット通信にする
- Workerプロセス数の調整
- タイムアウト値調整
以上、簡単にRailsアプリケーションおよびその下回りとなるミドルウェアでまず最初にやっておきたい設定についてまとめてみました。