Rails アプリの新規作成手順

忘備録として、できるだけクリーンな状態で Railsアプリを作成する方法をまとめてみました。GitHubへの同期、Herokuでの公開までやってみました。

初心者なので、アドバイスをいただければ嬉しいです。


開発環境

開発環境: Mac

IDE: RubyMine

データベース: Postges

開発環境サーバー: puma-dev


Rails アプリの作成

rails_app フォルダーに Railsアプリを作っていきます。

$ cd rails_app/

$ mkdir app_name
$ cd app_name/
$ bundle init
$ vim Gemfile

Gemfileを編集します。

gem rails #を外す

gem を Railsアプリごとにインストールするために、オプション --path vendor/bundleをつけます(rails コマンドに bundle exec をつける必要が出てくる)。データベースとして、Postgres を指定します。

$ bundle install --path vendor/bundle

$ bundle exec rails new . --skip-bundle -d postgresql

Gemfile を編集して必要なGemを入れる。(特にいじらなくてもよい)

クリーンなインストールのため、もう一度 bundle install します。

$ rm -rf .bundle

$ rm -rf vendor/bundle
$ bundle install # 一度、path を指定すると、--path vendor/bundle は不要となる


Postgres

本番環境 Heroku では、データベース Postges を使用する予定なので、開発環境 Mac でも同じものを使用します。

$ brew install postgresql

バージョン確認

$ postgres --version

参考)データベースクラスタの場所(インストール時に自動で作成される)

/usr/local/var/postgres

Postgres がデフォルトで参照するデータベースクラスタを設定、パスを通します。ファイルを編集後は source .bash_profile で設定を反映させることを忘れないようにしましょう。

$ vim .bash_profile

$ source .bash_profile

.bash_profile に追記するコード

 # postgres

export PATH=/usr/local/Cellar/postgresql/11.2/bin/:$PATH
export PGDATA=/usr/local/var/postgres

Postgres の起動と終了

$ pg_ctl -l /usr/local/var/postgres/server.log start

$ pg_ctl stop

起動した状態でデータベースの作成(macのユーザー名で作ると、database.yml への追加の設定が不要になる。)

createdb app_name_development -O <mac_user_name>

createdb app_name_test -O <mac_user_name>

参考)config/database.yml は次のようになっています。設定を変更することなく作業を進めることができます。


config/database.yml

# PostgreSQL. Versions 9.1 and up are supported.

#
# Install the pg driver:
# gem install pg
# On OS X with Homebrew:
# gem install pg -- --with-pg-config=/usr/local/bin/pg_config
# On OS X with MacPorts:
# gem install pg -- --with-pg-config=/opt/local/lib/postgresql84/bin/pg_config
# On Windows:
# gem install pg
# Choose the win32 build.
# Install PostgreSQL and put its /bin directory on your path.
#
# Configure Using Gemfile
# gem 'pg'
#
default: &default
adapter: postgresql
encoding: unicode
# 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: app_name_development

----略---

test:
<<: *default
database: app_name_test

---略---


参考)作成したデータベースの確認

$ psql -l

参考)データベースの削除

$ dropdb db_name


Rails アプリ用のテーブルを作成

Postgres に使用するテーブルを作成します。

$ cd ~/rails_app/app_name

$ bundle exec rails db:migrate RAILS_ENV=development
$ bundle exec rails db:migrate RAILS_ENV=test

Railsサーバーの起動

$ bundle exec rails server

起動の確認

http://localhost:3000

確認取れたら、Ctrl + C でサーバーを終了


puma-dev

puma-devを使うと、Railsサーバーを起動しなくてよいので便利です。ローカルで https:// 接続できるようになります。

puma-devの導入

$ brew install puma/puma/puma-dev

$ sudo puma-dev -setup
$ puma-dev -install -d test # デフォルトで http://appname.dev でアクセスする仕様だが、Chromeでエラーになるため .test に変更する。test でなくても良い

puma-devの設定

$ cd ~/.puma-dev

$ ln -s ~/rails_app/app_name/ app_name
$ cd ~/rails_app/app_name
$ touch tmp/restart.txt

確認(rail server は起動しなくて良い)

http://app_name.test


GitHub

起動の確認が取れましたので、ここで GitHubに保存しておきます。


RubyMineの設定を保存したくない時

.gitignore に追記する

# Ignore IDE settings

/.idea

GitHubサイト で新しいレポジトリを作成する

snap_1313.png

初めてのコミットを Pushします。

$ git remote add origin git@github.com:creativival/app_name.git

$ git add -A
$ git commit -m 'first commit'
$ git push -u origin master


Heroku

無料で利用できるホスティングサービスで、Railsアプリを公開してみます。

まずは Heroku よりユーザー登録を済ませます。

Railsアプリでページを作っておかないと、Heroku上で表示できないため、トップページのみ作成します。

$ bundle exec rails generate controller StaticPages top

ルーティングを変更して、ルートにアクセスするとトップページを表示するようにします。


config/routes.rb

Rails.application.routes.draw do

root 'static_pages#top'
# For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
end

Heroku にログインします。メールアドレス、パスワード、2段階認証の数字を入力します。

$ heroku login -i

Herokuアプリを作成します。

$ heoku create app-name # アンダーバーは使えません

Heroku環境でのデータベースの設定を調べます。

$ heroku addons:create heroku-postgresql:hobby-dev # 初回のみ

$ heroku config
DATABASE_URL: postgres://<username>:<password>@<host>:<port>/<database>

この DATABASE_URL を database.yml に記載するのですが、Rails5.2 より credentials.yml.enc に暗号化して書き込むので、一手間かかります。

参考: Heroku PostgresをRailsアプリで利用する手順

$ EDITOR=vim bin/rails credentials:edit

ファイルが自動で開くので、次のように書き込みます。(iで書き込みモードにして、escで書き込みモードから出て、':wq'で上書き保存する)


config/credentials.yml.enc

DATABASE_URL: postgres://<username>:<password>@<host>:<port>/<database>


database.yml から credentials.yml.enc の情報を読み込むには以下のように設定します。


config/database.yml

production:

url: <%= Rails.application.credentials.DATABASE_URL %>

以上で、rails側の設定はできたので、GitHub に保存します。

$ git add -A

$ git commit -m 'heroku settings'
$ git push origin master

Heroku にも git push します。

$ git push heroku master

Heroku環境でテーブルを作成します。

$ heroku run rails db:migrate

Railsアプリが公開できたか、確認してみます。

https://app-name.herokuapp.com

snap_1315.png


(追記)Herokuへの git pushでエラーが出た時

こちらの記事に助けられました。ありがとうございます。

[memo] Herokuで Could not find 'bundler' (2.0.1) と言われた

Rubyは最新版を使用していたので、bundlerのみアップデートすることで、deployに成功しました。

$ gem install bundler -v 2.0.2

$ rm Gemfile.lock
$ bundle install
$ git add Gemfile.lock
$ git commit -m 'version up bundler'
$ git push origin master
$ git push heroku master

remote: Verifying deploy... done.

さあ開発を進めましょう !