Railsで簡単なセリフ検索アプリを作りました。
初めての公開なのでherokuを使ったのですが、結構時間がかかってしまったのでデプロイまでの流れと初心者がハマりやすいところをメモしときたいと思います。
#前提条件
- railsアプリがすでにできている
- herokuの登録は完了している
- herokuコマンドが使える
#環境
- Mac
- docker
- MySQL
#herokuにファイルをアップロードする
herokuにアプリをアップロードするためにはgitを使います。
まずはターミナルでherokuにログイン。
heroku login
Enterを押すと勝手にブラウザが開くのでloginボタンを押します。
ログインできたら次はアプリを作ります。
heroku create アプリ名
アプリ名を入力しなかったら勝手に名前がつきます。
また、同じ名前のアプリ名があるとエラーが出ます。
アプリを作ったらgitでファイルをアップしましょう。
git init
git add .
git commit -am "first commit"
git push heroku master
これでファイルのアップロードはおkです。
#DB周辺の設定
DB設定が結構ハマるポイントだと思いますので丁寧に進めていくことをおすすめします。
MySQLを利用したいので、まずはherokuでクレジットカード情報を登録しときます。お金はかかりません。登録ができたら以下を実行。
$ heroku addons:create cleardb:ignite
これでMySQLの設定はできましたが、railsはmysql2を利用していると思うので(gemファイルで確認できます)mysql2にも繋ぎます。
heroku config
CREATE_DATABASE_URL: mysql://~~~~~~~
「heroku config」で出たURL(上みたいなやつ)をmysql2に設定します。
heroku config:add DATABASE_URL=mysql2://~~~~~~~~
heroku config:set DATABASE_URL='mysql2://~~~~~~~~'
これでmysql2にも設定できました。
最後に、
heroku run rake db:migrate
したらおk。
これであとは「OPENAPP」押したら(コマンドならheroku open)アプリは立ち上がります。ここまでは特に問題ないのですが、めんどくさいのが初期データを投入する場合です。
初期データを投入するときは、まずアプリに以下のファイルを作り記述を行います。
Dir.glob(File.join(Rails.root, 'db', 'seeds', '*.rb')).each do |file|
desc "Load the seed data from db/seeds/#{File.basename(file)}."
task "db:seed:#{File.basename(file).gsub(/\..+$/, '')}" => :environment do
load(file)
end
end
User.create!([
{name: "test", email: "sample@email.com",password:"testtesttest"}
])
初期データを記入したらherokuにpushしときます。そのあとに以下のコマンドを打つと初期データが投入されます。
heroku run rake db:seed
ただここで気をつけないといけないのは、例えばログイン機能などをControllerを経由して入るように設定していると入れません。
どうやら初期データはControllerを経由しないらしく、ただデータベースに放り込まれるだけらしいのでそれでログインはできません。なので、ユーザー情報とかはアプリで新規登録するのがいいと思います。
また、複数の同じモデルのデータを投入したい場合はvalidatesをかけてると一番上のデータ以降読み込んでくれなくなってしまうので外しときましょう。
ちなみに、複数の別のモデルを投入したい場合は以下のようにファイルを分けたらいいと思います。
User.create!([
{name: "test", email: "sample@email.com",password:"testtesttest"}
])
Item.create!([
{item:"*********"}
])
require './db/seeds/users.rb'
require './db/seeds/items.rb'
これで複数モデルを読み込むことができます。
#まとめ
これでherokuへのデプロイができます。私みたいな初心者が躓きやすそうなところなので参考になれば嬉しいです。