前回では、DockerでRailsの環境構築し、localhost:3000でブラウザに表示をするとデータベース由来のエラーメッセージが出てしまうところまで確認したと思います。
👇前回の記事はこちら
今回はRailsのディレクトリにあるconfig/database.ymlとdocker-compose.ymlを編集して、DBの環境構築をしていこうと思います!
👇前回作ったコンテナに入り、rails db:create(railsコマンド:DBを作るという意味)を実行するとエラーが出てしまうことを確認する。(理由はconfig/database.ymlにホスト、ユーザー、ポートなど設定を記述できていないから、rails側がdbを作れないよーって言っている)
1 2 3 4 5 6 7 8 9 |
============コンテナ内に入る================ [~/Desktop/product-register] $ docker-compose ps Name Command State Ports ----------------------------------------------------------------- product-register_web_1 irb Up 0.0.0.0:3000->3000/tcp [~/Desktop/product-register] $ docker-compose exec web bash ================railsコマンドでdb作成=================== root@1ffbf980bfdf:/product-register$ rails db:create ~~~~~~~~~~~~~~~~~~~~~~ERROR~~~~~~~~~~~~~~~~~~~~~~~~~ |
👇よし、早速config/database.ymlを編集していこう。
1 2 3 |
===一度コンテナを出て、カレントディレクトリ(~/product-register)をVScodeで開く=== root@1ffbf980bfdf:/product-register$ exit [~/Desktop/product-register] $ code . |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<product-register/config/database.yml> default: &default adapter: postgresql encoding: unicode -------------------------追加記述部分---------------------------- host: db user: postgres port: 5432 password: <%= ENV.fetch("DATABASE_PASSWORD") %> -------------------------------------------------------------- # For details on connection pooling, see Rails configuration guide # http://guides.rubyonrails.org/configuring.html#database-pooling pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> development: <<: *default database: product-register_development |
👇docker-compose.ymlも編集していきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
<docker-compose.yml> version: '3' volumes: db-data: services: web: build: . ports: - '3000:3000' volumes: - '.:/product-register' # database.ymlで設定した環境変数を定義 environment: - 'DATABASE_PASSWORD=postgres' tty: true stdin_open: true # dbを構築してからwebを構築する depends_on: - db # webからdbにアクセスできるようにする links: - db db: image: postgres volumes: - 'db-data:/var/lib/postgresql/data' environment: - 'POSTGRES_USER=postgres' - 'POSTGRES_PASSWORD=postgres' |
👇config/database.ymlとdocker-compose.ymlの編集が完了したので、ビルドして、コンテナを起動してみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<Command> =======docker-composeをビルド&ランする========= [~/Desktop/product-register] $ docker-compose up -d Docker Compose is now in the Docker CLI, try `docker compose up` Recreating product-register_db_1 ... done Recreating product-register_web_1 ... done =======rails,postgresqlの2つのコンテナがUpしていることを確認======== [~/Desktop/product-register] $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 09d48c4f1850 product-register_web "irb" 9 seconds ago Up 5 seconds 0.0.0.0:3000->3000/tcp product-register_web_1 0c42b627936a postgres "docker-entrypoint.s…" 13 seconds ago Up 10 seconds 5432/tcp product-register_db_1 ========コンテナに入る======== [~/Desktop/product-register] $ docker-compose exec web bash root@09d48c4f1850:/product-register$ |
👇コンテナ内でDBを作成し、railsのアプリ(今回はサンプル)を立ち上げてみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
=====================DBを作成======================== root@09d48c4f1850:/product-register$ rails db:create Created database 'product-register_development' Created database 'product-register_test' =====================サンプルとしてrailsのアプリを作る========================= root@09d48c4f1850:/product-register$ rails g scaffold product name:string price:integer vendor:string =============dbにmigrate(移行)する======================= root@09d48c4f1850:/product-register$ rails db:migrate ====================Railsを起動========================== root@09d48c4f1850:/product-register$ rails s -b 0.0.0.0 => Booting Puma => Rails 5.2.6 application starting in development => Run `rails server -h` for more startup options Puma starting in single mode... * Version 3.12.6 (ruby 2.5.9-p229), codename: Llamas in Pajamas * Min threads: 5, max threads: 5 * Environment: development * Listening on tcp://0.0.0.0:3000 |
ブラウザで『localhost:3000』と打てば、Railsの最初の画面が表示されます。
『localhost:3000/products』で、Railsアプリも起動できることを確認しました。
自分で触って遊んでみて下さい。
いかがだったでしょうか?今回はサンプルとしてRailsフレームワークで試してみましたが、Pythonを使う方ならDjangoフレームワークでアプリの開発環境を構築してみて下さい!(僕もいずれ記事にまとめます)
今回はこの辺で、バイバイ👋
コメントを残す