DockerでRuby on Rails 環境構築

docker
Sponsored links

Rubyの最新バージョン確認

以下から最新版のrubyバージョンを確認できる
https://www.ruby-lang.org/ja/downloads/
2020/06/23時点では2.7.1らしい

一応以下からそのバージョンのrubyのDockerイメージがあるか確認
https://hub.docker.com/_/ruby/

Postgresの最新バージョン確認

以下から最新版のpostgresの最新バージョンを確認
https://openstandia.jp/oss_info/postgresql/version-detail/20200525-v04.html
12.3っぽい

一応同じようにDockerHubを確認
https://hub.docker.com/_/postgres/

最小構成でdocer-compose up

rubyとpotgresの最小構成でとりあえずdocker-compose upしてみる

version: '3'
services:
  app:
    build:
        app
    volumes:
        - ./app/src:src
    ports: 
        - "3000:3000"
    depends_on: 
        - db
  db:
    build: postgres
    environment:
      POSTGRES_PASSWORD: mysecret
    volumes:
      - ./postgres/data:/var/lib/postgresql/data
    ports:
      - 5432:5432
  • コンテナが立ち上がったか確認
$ docker-compose up -d
Starting ruby-playground_db_1 ... done
Starting ruby-playground_app_1 ... done
$ docker ps
CONTAINER ID        IMAGE                 COMMAND                  CREATED              STATUS              PORTS                                              NAMES
5a5819ed8ce5        ruby-playground_app   "irb"                    About a minute ago   Up 56 seconds       0.0.0.0:3000->3000/tcp                             ruby-playground_app_1
95c98bbcd325        ruby-playground_db    "docker-entrypoint.s…"   8 minutes ago        Up 57 seconds       0.0.0.0:5432->5432/tcp                             ruby-playground_db_1

コンテナに入ってみる

  • ruby環境
$ docker-compose exec app /bin/bash
[email protected]:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  src  srv  sys  tmp  usr  var
[email protected]:/# ruby -v
ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-linux]
  • postgres環境
[[email protected] ruby-playground]$ docker-compose exec db /bin/bash
[email protected]:/# psql --version
psql (PostgreSQL) 12.3 (Debian 12.3-1.pgdg100+1)
[email protected]:/# psql -U postgres
psql (12.3 (Debian 12.3-1.pgdg100+1))
Type "help" for help.

postgres=#

うまくいっているみたい

rails環境でHello Worldしてみる

Rails Tutorialの1章に沿ってやってみる
– ruby環境のコンテナに入ってrailsをインストール

# gem install rails -v 6.0.3
$ curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
$ apt update && apt install yarn 

これでnodejsとyarnが使えるようになっているっぽい

# nodejs -v
v10.21.0
# yarn -v
1.22.4

rails newで作ってみる。rails tutorialはrailsのバージョンを指定して行うのが慣例みたいだ。

$ rails _6.0.3_ new hello_app

コンテナで起動しているrailsはホストからアクセスできるように以下のようにしてstartする必要があるらしい

$ rails server -p 3000 -b 0.0.0.0

docker-composeのリビルド

$ sudo docker-compose up -d --build --force-recreate 

docker-composeでセットした環境変数がセットされているか確認

[email protected]:/src# echo DATABASE_HOST
db
[email protected]:/src# echoDATABASE_USER
appuser

databaseがないとのエラー
PostgreSQL環境にDBを作ったが、どうもDBユーザーにCREATEDBの権限がテストで必要みたい

# rails g model User name:string email:string
# rails db:migrate
rails aborted!
ActiveRecord::NoDatabaseError: FATAL:  database "sample_app_development" does not exist
Caused by:
PG::ConnectionBad: FATAL:  database "sample_app_development" does not exist

rails testで失敗した。どうもユーザーにCREATEDBの権限がいるみたいだ。

PG::InsufficientPrivilege: ERROR:  permission denied to create database
Couldn't create 'sample_app_test-0' database. Please check your configuration.
PG::InsufficientPrivilege: ERROR:  permission denied to create database
Couldn't create 'sample_app_test-1' database. Please check your configuration.
PG::InsufficientPrivilege: ERROR:  permission denied to create database
Couldn't create 'sample_app_test-2' database. Please check your configuration.
PG::InsufficientPrivilege: ERROR:  permission denied to create database
Couldn't create 'sample_app_test-3' database. Please check your configuration.
E

Error:
StaticPagesControllerTest#test_should_get_help:                                                     
DRb::DRbRemoteError: PG::InsufficientPrivilege: ERROR:  permission denied to create database        
 (ActiveRecord::StatementInvalid)                                                     

Postgre接続ユーザーにCREATEDB権限をつけたら成功した
(Dockerコマンドのpostを参照)

# Running:

..

Finished in 6.250525s, 0.3200 runs/s, 0.3200 assertions/s.
2 runs, 2 assertions, 0 failures, 0 errors, 0 skips

どうもいろいろとテスト用のDatabaseが作成されていた。。

postgres=> \l
                                       List of databases
          Name          |  Owner   | Encoding |  Collate   |   Ctype    |   Access privileges   
------------------------+----------+----------+------------+------------+-----------------------
 app_db                 | appuser  | UTF8     | en_US.utf8 | en_US.utf8 | 
 postgres               | postgres | UTF8     | en_US.utf8 | en_US.utf8 | 
 sample_app_development | appuser  | UTF8     | en_US.utf8 | en_US.utf8 | 
 sample_app_test        | appuser  | UTF8     | en_US.utf8 | en_US.utf8 | 
 sample_app_test-0      | appuser  | UTF8     | en_US.utf8 | en_US.utf8 | 
 sample_app_test-1      | appuser  | UTF8     | en_US.utf8 | en_US.utf8 | 
 sample_app_test-2      | appuser  | UTF8     | en_US.utf8 | en_US.utf8 | 
 sample_app_test-3      | appuser  | UTF8     | en_US.utf8 | en_US.utf8 | 
 template0              | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +
                        |          |          |            |            | postgres=CTc/postgres
 template1              | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +
                        |          |          |            |            | postgres=CTc/postgres
(10 rows)

modelのテストはまだないはずなんだが、データが追加されている。
よくわからん。とりあえず、testでcreatedbされてテスト用のデータベースが作られることがわかった。

sample_app_test-3=> \c sample_app_test-2
You are now connected to database "sample_app_test-2" as user "appuser".
sample_app_test-2=> select * from users;
 id | name | email | created_at | updated_at 
----+------+-------+------------+------------
(0 rows)

sample_app_test-2=> \c sample_app_test-1
You are now connected to database "sample_app_test-1" as user "appuser".
sample_app_test-1=> select * from users;
    id     |   name   |  email   |         created_at         |         updated_at         
-----------+----------+----------+----------------------------+----------------------------
 980190962 | MyString | MyString | 2020-06-25 07:34:32.181479 | 2020-06-25 07:34:32.181479
 298486374 | MyString | MyString | 2020-06-25 07:34:32.181479 | 2020-06-25 07:34:32.181479
(2 rows)

Comments

タイトルとURLをコピーしました