Railsでよくやる環境設定まとめ
📗

Railsでよくやる環境設定まとめ

Created
Sep 27, 2022 08:44 AM
Tags
Ruby on Rails

Docker

  • dockerdev ディレクトリを作成し、docker-compose.yml を置く。
  • Docker ではデータベースなどのミドルウェアを起動する。
  • Rails や npm はホストマシンで実行する。

docker-compose.yml

version: '3.7' services: postgresql: image: postgres:13 environment: POSTGRES_PASSWORD: postgres volumes: - postgresql:/var/lib/postgresql/data ports: - '5432:5432' cache: image: redis:6.0 volumes: - redis:/data ports: - '6379:6379' smtp: image: schickling/mailcatcher ports: - '1025:1025' - '1080:1080' volumes: postgresql: redis:

rbenv

  • Ruby のバージョン管理
rbenv
rbenvUpdated Nov 30, 2022

nodenv

  • node.js のバージョン管理
nodenv
nodenvUpdated Nov 25, 2022

EditorConfig

.editorconfig

root = true [*] end_of_line = lf insert_final_newline = true trim_trailing_whitespace = true indent_style = space indent_size = 2

direnv

export PATH=./bin:$PATH export COMPOSE_PROJECT_NAME=app-name dotenv

.envrc

  • ./bin に PATH を通す
  • docker compose のプロジェクト名(コンテナ名のプレフィックス)を指定
  • .env を読み込む。
    • .env は gitignore してリポジトリにコミットしない
    • 個人のカスタマイズや外部サービスの秘密鍵などは .env に設定する運用

foreman

foreman
ddollarUpdated Nov 27, 2022
  • puma や sidekiq、webpack などをいっぺんに起動する。
  • 作業ディレクトリの環境変数を設定する。

bin/dev

#!/usr/bin/env bash if ! foreman version &> /dev/null then echo "Installing foreman..." gem install foreman fi foreman start -f Procfile.dev "$@"
  • direnv で PATH を通しているので dev で実行できる。

Procfile.dev

web: bin/rails server -p 3000 worker: bin/rails resque:work js: yarn build:watch
  • ポート番号を指定しないとデフォルトで環境変数に PORT=5000 が設定されるので注意。

RSpec

rspec-rails
rspecUpdated Nov 26, 2022
  • gem は rspec-rails を入れる。

初期設定

$ rails generate rspec:install $ rm -rf test

spec/rails_helper.rb

  • 以下のコメントを外しておく。
Dir[Rails.root.join('spec', 'support', '**', '*.rb')].sort.each { |f| require f }

.rspec

--color --format doc --require spec_helper

Rubocop

Gemfile

  • 以下の gem をインストールする
group :development, :test do gem "rubocop" gem "rubocop-github" gem "rubocop-rails" gem "rubocop-rspec" end

.rubocop.yml

inherit_gem: rubocop-github: - config/default.yml - config/rails.yml require: - rubocop-rails - rubocop-rspec AllCops: Exclude: - 'bin/**/*' - 'public/**/*' - 'tmp/**/*' - 'log/**/*' - 'vendor/**/*' - 'node_modules/**/*' - 'db/migrate/*' - 'db/schema.rb'

database.yml

  • gitignore しない。
  • 開発環境は環境変数で接続先を変更できる。
  • 本番環境の接続先はURLで指定する。
default: &default adapter: postgresql encoding: unicode username: <%= ENV.fetch("POSTGRES_USERNAME") { "postgres" } %> password: <%= ENV.fetch("POSTGRES_PASSWORD") { "postgres" } %> host: <%= ENV.fetch("POSTGRES_HOST") { "localhost" } %> pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> development: <<: *default database: <%= ENV.fetch("POSTGRES_DATABASE") { "app_name_development" } %> test: <<: *default database: app_name_test production: adapter: postgresql encoding: unicode url: <%= ENV["DATABASE_URL"] %> pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

ActionMailer

  • SMTP をデフォルトでは Dockerで起動する mailcatcher に向けつつ、環境変数を設定することで外部サーバーも利用できる設定。

config/environments/development.rb

# Don't care if the mailer can't send. # config.action_mailer.raise_delivery_errors = false config.action_mailer.perform_caching = false config.action_mailer.perform_deliveries = true config.action_mailer.default_url_options = { host: "localhost", port: 3000 } config.action_mailer.delivery_method = :smtp config.action_mailer.smtp_settings = { user_name: ENV.fetch("SMTP_USERNAME") { "" }, password: ENV.fetch("SMTP_PASSWORD") { "" }, address: ENV.fetch("SMTP_ADDRESS") { "localhost" }, port: ENV.fetch("SMTP_PORT") { 1025 } }