Railsアプリ作成から、Herokuにプッシュまで
MacOS X Yosemite で Heroku にアプリを公開するまでの環境構築を何回かに分けて書きます。
vol.01 VirtualBox インストール編
vol.02 Vagrant インストール編
vol.03 Vagrant box作成編
vol.04 VagrantのCentOS 6.5 仮想マシン(box)起動まで
vol.05 Rails 開発環境準備
vol.06 Git 環境を整備
vol.07 Heroku 公開するまでの事前準備
も合わせてお読み下さい。(というか、先にこれらの操作が必要です)
必要なものが揃ってるか、確認
仮想マシンを落としている人は、Vagrant を立ち上げて、sshで接続しましょう。
仮想マシンを常に立ち上げっぱなしでも良いのですが、意外とバッテリーを消耗するような気がするのでしばらく使わないのであれば halt で落としておくと良いです。
vagrant up
vagrant ssh
準備が終わっているか、確認します。
ぼくは ssh で仮想マシンに接続し忘れて「あれ、rails入ってない?」とビビることがあるので、いま Mac なのか Vagrant なのかは確認するようにしてください。
rails -v
ruby -v
git version
heroku version
上記3コマンドですべてバージョンが表示されれば、準備完了です!
特に git バージョンが古いと heroku に対応してないので要注意です。
アプリ仕様
今回のアプリ仕様は次のようにします。
- DBは Vagrant の仮想マシン内では SQLite、Heroku内では PostgreSQL
- Heroku は無料の個人向けアカウントで、アドオンは使用しない
Heroku用 Railsアプリ作成
以下の4ステップで、完了です。
- Heroku上にアプリ(の箱)を用意し、
- Vagrant内で同名の Rails アプリを作成し、
- Gitの管理下にソースファイルを置き、
- コマンドで heroku へ push する
ここではアプリ名を heroku-app とします。
ですが、heroku ではアプリ名がユニークである必要があり、以下のコマンドを実行したら Name is already taken というメッセージが表示された場合、他のアプリ名にしてください。
heroku create heroku-app
Creating heroku-app... done, stack is cedar-**
https://heroku-app.herokuapp.com/ | https://git.heroku.com/heroku-app.git
のようなメッセージが返ってくれば成功です。
念のため、ブラウザで heroku のサイトにアクセスし、Dashboardを開いて Personal Apps に heroku-app が追加されたか確認すると良いと思います。
次にここでいよいよ、同名の railsアプリ を作成します。
rails new heroku-app
railsアプリ名は heroku で作成したアプリ名と同じにします。
さて heroku にアップルすために最小限、修正が必要だと思うのは次の4つです。
- Gemfile
- データベース情報
- .gitignore
本当の最小限という意味では、2.と3.すら必要ないのですが、さすがにそこまで切り詰めなくても良いかなと。
Gemfileの修正
Gemfileで最低限、修正が必要なのは2ヶ所。
cd heroku-app
vim Gemfile
ローカル側では SQLite、Heroku側では PostgreSQL を使うための記載。
# Use sqlite3 as the database for Active Record
gem 'sqlite3'
という 1行 を削除し、以下のように変更
group :development do
gem 'sqlite3'
end
group :production do
gem 'pg'
gem 'rails_12factor'
end
ローカル側で railsサーバ を使って動作確認などをするために、1ヶ所のコメントアウトを削除。
# コメントアウトを削除
gem 'therubyracer', platforms: :ruby
この2つを修正したら、bundle installしておきます。必ず --without production を付けておきましょう。仮想マシン内に PostgreSQL 環境が入っていれば良いのですが、入っていない場合はエラーとなるためです。
bundle install --without production
database.yml の修正
Herokuのデータベース情報を設定しておく必要あります。
ただ、ここで紹介する方法は推奨しづらいやり方です。この後、Gitの管理下に置くことになるのですが、.gitignoreなどに記載漏れがあるとデータベース情報までも保存されることになります。もし今後、GitHub にあげることになった場合など、ネットにデータベース情報が公開されかねません。
できれば環境変数(env)に情報を記載し、Git管理外にデータベース情報を置くようにしてください。
と前置きしつつ、ここでは話を簡単にするため、database.ymlに情報を直接書きます。
Heroku のデータベース情報を確認する必要があるのですが、以前はアプリを create すると自動的に PostgreSQL のデータベースが用意されていた気がするのですが、コマンドを叩かないと作成されなくなってるようです。
heroku addons:add heroku-postgresql --app heroku-app
のように打って、データベースを作成しましょう。最後の heroku-app はアプリ名ですので、ご自身で作成したアプリ名を入力してください。
データベース情報はブラウザで Heroku のダッシュボードにアクセスし、左上のメニューから Databases に移動します。
アプリ名に該当するデータベースがあると思うので、ここに記載されている Connection Settings の
- Database
- User
- Password
の3つをメモしておきます。では、railsの database.yml ファイルを修正します。
vim config/database.yml
production:
<<: *default
database: db/production.sqlite3
と書かれているのを削除し、以下のように修正して上書き保存します。もちろん、database、username、password 上でメモした情報に書き換えてください。
production:
adapter: postgresql
encoding: utf8
database: your_database
port: 5432
username: your_username
password: your_password
.gitignore の修正
Gitの管理下に置かないファイルを指定しておきます。
アプリの動作に致命的ではないので後回しにできなくもないですが、やはり最初に指定しておくのが良いでしょう。
vim .gitignore
ここでは下記の3つを追記して、データベース情報を記載したファイルと、Macなどで操作した場合にできるファイルなどを管理下から外しておきます。
config/database.yml
*.DS_Store
*.swp
アプリ動作確認から、Herokuにプッシュまで
ここまでで Rails の空アプリが完成しました。
Railsサーバを立ち上げて動作確認と、Herokuにプッシュまで行います。
ここで Rails 4.2 を使っている場合は要注意です。通常は
rails s
というコマンドでRailsサーバが立ち上がります(rails serverと打っても同じです)。
ところが、Rails 4.2.0 からはサーバを立ち上げてもアクセスできなくなっているようです。
bundle exec rails server -b 0.0.0.0
というコマンドでRailsサーバを起動してください。
サーバが立ち上がれば、ブラウザで http://localhost:3000/ (または、http://192.168.33.10:3000/ )にアクセスします。3000番ポート や 192.168.33.10 というIPアドレスは、Vagrantfile で設定したものです。もしRailsサーバは立ち上がってるのにアクセスできない場合、Vagrantの設定を見なおしてください。
Welcome aboard
You’re riding Ruby on Rails!
という表示をブラウザで確認できれば成功です。
Railsサーバは Control+c で停止できます。
あとは Git の管理下にファイルを置き、Heroku にプッシュします。
まずは Git の登録ですが、詳細は省略します。最初の2つは初回のみ必要なコマンドです。
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
git init
git add .
git commit -m "Initial commit"
git status などで確認して問題なさそうなら、Herokuにプッシュします。
初回のみ、git remote を Heroku に指定します。
heroku git:remote --app heroku-app
全て準備が整いました、Herokuにプッシュします。このコマンドは完了まで少し時間がかかります。
git push heroku master
エラーらしきメッセージが表示されなければ成功したと思って良いと思います。
Herokuのダッシュボードにアクセスし、該当のアプリを開いて上部の Open Application のリンクを開いてみましょう。
URLを直接入れても良いですが、少なくとも初回だけは打ち間違えなどを考えるとダッシュボード経由が良いです。
いかがでしょうか?
The page you were looking for doesn't exist.
You may have mistyped the address or the page may have moved.
と表示されれば、実は成功(している可能性が高い)です。
というのも、Railsでルートの指定(/でアクセスした際に何を表示するかの指定)をしていません。
あえて最もシンプルな形でのアップをしたので、あとは Railsアプリ を作りこんでいけば良いです。
キーワード
- MacOS X
- VirtualBox
- Vagrant
- CentOS
- Ruby on Rails
- RVM (Ruby Version Manager)
- Heroku