Rails app heroku deploy
まず大切なことをまとめる。
- herokutoolbelt のインストールは必要ない
- ssh も作成する必要は無い
- アセットプレコンパイルも必要ない。それをするのがheroku
- git のブランチのmasterがpush されるので、masterブランチに切り替えておくこと!
これにハマった。 ruby on rails - Removed sqlite gem but Heroku still detects sqlite gem and fails - Stack Overflow
- 本家サイトを見るべし!
heroku は postgres なので DB変更
gemを追加 productionのみポスグレに変更
//sqliteはコメントしておかないとエラーになる。 //ローカルで利用するときはコメントを外してbundle install #gem 'sqlite3', '~> 1.3.0' group :production do gem 'pg' gem 'rails_12factor' end
database.ymlも書き換える
ローカルでもpostgresを利用しないといけないことはない。 これは検証の必要あり。
default: &default adapter: postgresql pool: 5 timeout: 5000 development: <<: *default database: udemy-1_development //説明1を参照 production: adapter: postgresql username: <%= ENV['DB_USERNAME'] %> password: <%= ENV['DB_PASSWORD'] %> encoding: utf8 database: hogehoge_rails1 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> url: <%= ENV['DATABASE_URL'] %>
ローカルに作成するDBは当然 development
postgres install
postgres-serverを入れると必要な依存パッケージは入れてくれる
$ sudo yum install postgresql-server バージョン確認 $ psql -V //== psql (PostgreSQL) 9.6.11
DB初期化、起動
$ sudo service postgresql initdb //起動 $ sudo service postgresql start //自動起動をon $ sudo chkconfig postgresql on
postgresSQLアカウント設定
//psqlユーザーでログインする $ sudo su - postgres //postgresディレクトリに移動するので psqlと入力 -bash-4.2$ psql //これでpostgresに入れる。
postgresでは linux のユーザーが必要
そこでLinuxにすでにある ec2-userをownerに指定している。
今のログインした状態でSELECT rolname FROM pg_roles;
または\duコマンドで、既存のロールを見ることができます。
新しくロールを作るにはCREATE ROLE name;
postgres=# CREATE ROLE "ec2-user" LOGIN CREATEDB PASSWORD 'パスワード入力';
//DBを作成ownerは ec2-user postgres=# create database "DB名" owner "ec2-user"; postgres=# GRANT ALL PRIVILEGES ON database "DB名" TO "ec2-user"; //DB確認 (バックスラッシュ + L) postgres=# \l //==できています ------------------------ postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | simple_board_development | ec2-user | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =T c/"ec2-user" \q で抜ける postgres=# \q //== exitで bashをぬける -bash-4.2$ exit
作成したDBを確認したい場合はPostgreSQLのシェルでSELECT datname FROM pg_database;
または\lコマンドを使えば確認することができます。
DB作成
postgres=# create database thai_dict_development OWNER thai_dict;
これで接続可能 接続テストする これでロールとDBの準備が整えました。
psql --username=[user_name] --password --dbname=[DB_NAME]
しかしエラー
クライアント認証のエラー
どのipからどのユーザーの接続を許可するかの設定。 不便なので pg_hba.conf を設定し直す
//探す $ sudo find / -name pg_hba.conf | grep pg_hba.conf //==あった /var/lib/pgsql96/data/pg_hba.conf
このサイトを参考に変更 UbuntuでPostgreSQLをインストールからリモートアクセスまでの手順 - Qiita
すべてtrust に変更
これはcloud9だけの設定なのでherokuには引き継がれないので大丈夫
# TYPE DATABASE USER ADDRESS METHOD # "local" is for Unix domain socket connections only local all all trust # IPv4 local connections: host all all 127.0.0.1/32 trust # IPv6 local connections: host all all ::1/128 trust
ログを見る限り、herokuでは rakeを使っているようだ。
$ rake db:migrate
SQLite on Heroku | Heroku Dev Center
基本ここの情報が大切
ローカルでサーバーが起動したら、
heroku CLIのインストール、設定
このようなエラーがでて、cloud9ではnodeのバージョンが8以上が求められる。
WARNING Node version must be >=8.0.0 to use this CLI WARNING Current node version: 6.17.0
NVMのインストール
説明
まずnvm がnodeのバージョン管理ツール nodeとはサーバーサイドのJavaScriptになる。
その上で npm とはnode.jsで作られた、パッケージやライブラリを管理するツール
nvmが言語なのでnvmのバージョンが古いと当然、npmが動かないことがありうる。
よってまずnvm のバージョンを上げてあげるのが大切。
windousXPに windows10のアプリ入れて動かないのと同じ事
nvm インストール可能なバージョン確認
$ nvm ls-remote v10.15.2 (LTS: Dubnium) v10.15.3 (Latest LTS: Dubnium) v11.0.0 //latest が10.15.3 なのでそれを入れる $ nvm install v10.15.3 //バージョン10.15.3を利用 $ nvm use v10.15.3
$ npm install -g heroku $ heroku --version //==入っています heroku/7.22.9 linux-x64 node-v10.15.3
herokuにアプリをまず作成する 参考サイト
herokuにログインした状態で
$ heroku create //==作ってくれている Creating app... done, ⬢ blooming-thicket-97684 https://blooming-thicket-hogehoge.herokuapp.com/ | https://git.heroku.com/blooming-thicket-hogehoge.git
$ heroku login -i //email パスワードを入力 $ heroku create $ git remote -v //==git のremoteにherokuが追加されていることを確認 remote.heroku.url=https://git.heroku.com/intense-hogehoge.git remote.heroku.fetch=+refs/heads/*:refs/remotes/heroku/*
これ大切
$ heroku git:remote -a [herokuが決めるドメイン]
デプロイ
$ git push heroku master しかしこのようなエラー herokuにて * If you use Sass as a command-line tool, we recommend using Dart Sass, the new primary implementation: https://sass-lang.com/install
gem の'sass-rails', '~> 5.0' をコメントしてサイドbundle install
//--without productionは利用しない 利用するとheorku deploy時にエラーになる $ bundle install $ heroku logs --tail $ heroku run rails db:migrate
サーバーの環境変数を設定する
説明1
先程上記でdatabase.yml に記載していた。
username: <%= ENV['DB_USERNAME'] %> password: <%= ENV['DB_PASSWORD'] %>
をheroku のサーバーの環境変数にセットしないといけない。
herokuの環境変数をセット
$ heroku config:set DB_USERNAME=hogehoge $ heroku config:set DB_PASSWORD=hogehoge