どうもこんにちは
何度目でしょうか、Docker+Railsの環境構築エントリは…笑
前回はMySQLとの組み合わせでしたが今回はPostgreSQLとの組み合わせでいきます、herokuの無料MySQLがクレジットカード登録しないと使えないからPostgreSQLという選択です
基本的にはこれ
DockerでRails + MySQLアプリを立ち上げる手順メモ
と同じような手順なんですがDB違うだけで少し詰まったりするので忘れないようここに書いておきます
使用するイメージ
pullってください
takashioshikawa/ruby-native-2.2.4
mysql:latest
PostgreSQLコンテナ立ち上げ
pos-conという名前のコンテナを立ち上げます
docker run --name pos-con -p 5432:5432 -d postgres
ポートは5432番
Railsコンテナ立ち上げ
docker run --rm -it -p 9000:80 --name rails-container --link pos-con:pos-con takashioshikawa/ruby-native-2.2.4
ローカルからRailsアプリを見る時のポートは9000を指定
--linkでPostgreSQLコンテナを指定しています
Railsコンテナ内でアプリ作成
Railsアプリを作成するディレクトリを作成
mkdir /usr/src/rails-app
cd /usr/src/rails-app
このコンテナ内にPostgreSQLが入っていないとRailsが立ち上がってくれないので入れておきます
wget http://yum.postgresql.org/9.6/redhat/rhel-6-x86_64/pgdg-redhat96-9.6-1.noarch.rpm
rpm -ivh pgdg-redhat96-9.6-1.noarch.rpm
yum install -y postgresql96-devel
PostgreSQL用のgemインストール
gem install pg -- --with-pg-config=/usr/pgsql-9.6/bin/pg_config
Gemfile作成
bundle init
Gemfile編集
source "https://rubygems.org"
gem "rails", "4.2.5"
bundleインストール
bundle install
Railsアプリ作成
bundle exec rails new rails-test -d postgresql
cd rails-test
Gemfile編集
vim Gemfile
#ここがコメントアウトされてるので外す その他は最初と同じ
#gem 'therubyracer', platforms: :ruby
gem 'therubyracer', platforms: :ruby
database.yml編集
vim config/database.yml
development:
<<: *default
database: test-rails_development
host: pos-con
username: postgres
password:
test:
<<: *default
database: test-rails_test
host: pos-con
username: postgres
password:
※usernameやpasswordはデフォルトのままなので本番用は変更しておきましょう
bundleインストール
bundle install
DB作成
bundle exec rake db:create
必要なファイル生成
bundle exec rails g scaffold User name:string
DBマイグレート
bundle exec rake db:migrate
database.ymlでPostgreSQLを指定したのでpos-conの中にデータベースが作成されているはずです
確認してみましょう
Railsコンテナのコンソールはそのままにしていおて、別タブなどで
docker exec -it pos-con psql -U postgres rails-test_development
を実行してみましょう
docker exec -it pos-con psql -U postgres rails-test_development
psql (9.5.0)
Type "help" for help.
rails-test_development=#
PostgreSQLコンテナの中に入れました
\d
でテーブル一覧を確認すると
rails-test_development=# \d
List of relations
Schema | Name | Type | Owner
--------+-------------------+----------+----------
public | schema_migrations | table | postgres
public | users | table | postgres
public | users_id_seq | sequence | postgres
scaffoldで生成したusersテーブルが確認出来ます
Rails実行
bundle exec rails s -b 0.0.0.0 -p 80
ブラウザで確認
現在dockerのrailsアプリが立ち上がっていると思うのでMacのChromeから見てみましょう
アクセスするURLは
http://docker-machineのIP:rails-containerのポート
docker-machineのIPを確認したい場合は
docker-machine ip VM名
で確認できる
僕の場合
http://192.168.99.100:9000
だった
Scaffoldで作成したUserにアクセスしてみる
http://192.168.99.100:9000/users
※ユーザは追加しました
本当にpos-conにデータが入っているのか確認しましょう
rails-test_development=# SELECT * FROM users;
id | name | created_at | updated_at
----+---------+----------------------------+----------------------------
1 | takashi | 2016-01-24 09:14:03.133892 | 2016-01-24 09:14:03.133892
(1 row)
rails-test_development=#
入っていますね
所感
データベースが違うのでdatabase.ymlをどう書き直すかだけがポイントです
hostをコンテナ名で指定しているのが面白いですね
以上です
参考
PostgreSQLとMySQLで、僕がよく使うシステムコマンドのメモ
インストールからRails-PostgreSQL環境を整える