yikegaya’s blog

yikegayaのブログ

久しぶりにrails newしたので設定作業メモ

最近仕事でrails newを実行するとこからAPIサーバ2つ作った。その際の設定作業メモ

使った技術やバージョンざっくり

key val
Dockerのbaseイメージ ruby:3.0.2-alpine3.14
Railsのバージョン 6.1.4
DB 片方がPostgresql、もう一方がMySQL

注意点

  • rails newする時にオプションをつけないと初期設定が面倒
  • rubyのイメージがalpineの場合、postgre、mysqlへの接続用ライブラリをdockerイメージ内で追加する必要あり
  • 別のdockerコンテナで立ち上がってるサービスにアクセスするにはconfigでdockerのDNSからのアクセスを許可する必要あり

rails newする時にオプションをつけないと初期設定が面倒

デフォルトだと要件に合わないのでオプションをつけてrails newすると初期設定が大分楽になる

  • デフォルトだとDBがSQLite→今回はPostgreSQLMySQLを使いたい
  • デフォルトだとテストフレームワークがminitest→rspecを使いたい
  • デフォルトだとerbやアセットパイプラインなどフロントフロントエンド開発に必要なライブラリもインストールされる→今回APIサーバが欲しいだけなのでいれたくない

実行したコマンド

rails new samle-api-app --api -d postgresql --skip-test

-dオプションでDB接続に必要なライブラリの追加、--skip-testでminitestのインストールスキップ、apiオプションでフロントエンドライブラリのインストールをスキップしてくれる。

rubyのイメージがalpineの場合、postgre、mysqlへの接続用ライブラリをdockerイメージ内で追加する必要あり

Dockerfileに以下追加が必要。alpineの場合これがないとDBに接続できない

# PostgreSQLの場合
RUN apk update \
    && apk add \
    postgresql-client \
    postgresql \
    postgresql-dev

# MySQLの場合
RUN apk update \
    && apk add \
    mysql-client \
    mysql-dev

別のdockerコンテナで立ち上がってるサービスにアクセスするにはconfigでdockerのDNSからのアクセスを許可する必要あり

別のDockerコンテナにhost.docker.internalというDocker内のDNSで接続したかったんだけどやってみると403エラーになった。 調べたところRails6からconfigに設定追加しないと接続できないらしい。

config/environments/development.rbに以下追記

config.hosts << "host.docker.internal"

これでこんな感じでHTTPリクエスト送ったりできる

Faraday.get("http://host.docker.internal:3000/api/v1/sample")

参考

qiita.com