LoginSignup
0
0

More than 3 years have passed since last update.

Railsアプリをherokuにデプロイするまでの大まかな流れとハマったところ

Last updated at Posted at 2020-02-09

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)アプリは立ち上がります。ここまでは特に問題ないのですが、めんどくさいのが初期データを投入する場合です。

初期データを投入するときは、まずアプリに以下のファイルを作り記述を行います。

lib/tasks/seed.rb

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
db/seeds.rb
User.create!([
  {name: "test", email: "sample@email.com",password:"testtesttest"}
])

初期データを記入したらherokuにpushしときます。そのあとに以下のコマンドを打つと初期データが投入されます。

heroku run rake db:seed

ただここで気をつけないといけないのは、例えばログイン機能などをControllerを経由して入るように設定していると入れません。
どうやら初期データはControllerを経由しないらしく、ただデータベースに放り込まれるだけらしいのでそれでログインはできません。なので、ユーザー情報とかはアプリで新規登録するのがいいと思います。

また、複数の同じモデルのデータを投入したい場合はvalidatesをかけてると一番上のデータ以降読み込んでくれなくなってしまうので外しときましょう。

ちなみに、複数の別のモデルを投入したい場合は以下のようにファイルを分けたらいいと思います。

db/seeds/users.rb
User.create!([
  {name: "test", email: "sample@email.com",password:"testtesttest"}
])
db/seeds/items.rb
Item.create!([
  {item:"*********"}
])
db/seeds.rb
require './db/seeds/users.rb'
require './db/seeds/items.rb'

これで複数モデルを読み込むことができます。

まとめ

これでherokuへのデプロイができます。私みたいな初心者が躓きやすそうなところなので参考になれば嬉しいです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0