Edited at

Railsのアプリケーション(MYSQL)をheroku(PostgreSQL)にデプロイした


はじめに

MYSQL、solidusで運用されているECサイトアプリケーションをherokuにデプロイする過程でかなり苦労したので、自分の確認用としてメモに残します。

よろしければ参考にしてみてください。

# 実行環境

ruby 2.4.1
rails 5.1.4
solidus 2.3
mysql2 0.4.9


1.database.ymlの変更


database.yml

#変更前

production:
<<: *default
database: hogehoge_production
username: hogehoge
password: <%= ENV['HOGEHOGE_DATABASE_PASSWORD'] %>

#変更後 passwordは空白でOKです
production:
<<: *default
adapter: postgresql
encoding: unicode
database: db/production.postgresql
pool: 5
username: test_postgre
password:



2.gitignoreの確認

# 下記のように/bundleが.gitignoreに追加されていたら

/vendor/bundle

# /bundleを含めないように変更
/vendor

# git addして管理対象に含める
git add

# Gitの管理対象に入っているか確認
git ls-files | sed -e '/^[^\/]*$/d' -e 's/\/[^\/]*$//g' | sort | uniq

# 入っていなければ手動で追加
git add /vendor


3.application.rbの変更

# 以下をconfig/application.rbに追加

config.assets.initialize_on_precompile = false


config/application.rb

require_relative 'boot'

require "rails"
# Pick the frameworks you want:
require "active_model/railtie"
require "active_job/railtie"
require "active_record/railtie"
require "action_controller/railtie"
require "action_mailer/railtie"
require "action_view/railtie"
require "action_cable/engine"
require "sprockets/railtie"
# require "rails/test_unit/railtie"

# Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production.
Bundler.require(*Rails.groups)

module Hogehogeec
class Application < Rails::Application

config.to_prepare do
# Load application's model / class decorators
Dir.glob(File.join(File.dirname(__FILE__), "../app/**/*_decorator*.rb")) do |c|
Rails.configuration.cache_classes ? require(c) : load(c)
end

# Load application's view overrides
Dir.glob(File.join(File.dirname(__FILE__), "../app/overrides/*.rb")) do |c|
Rails.configuration.cache_classes ? require(c) : load(c)
end
end

# Settings in config/environments/* take precedence over those specified here.
# Application configuration should go into files in config/initializers
# -- all .rb files in that directory are automatically loaded.

config.time_zone = 'Tokyo'
config.generators.test_framework = :rspec
config.generators.system_tests = false
config.generators.stylesheets = false
config.generators.javascripts = false
config.generators.helper = false
config.assets.initialize_on_precompile = false #追加

config.generators do |g|
g.test_framework :rspec,
fixtures: false,
view_specs: false,
helper_specs: false,
routing_specs: false
end
end
end



4.Gemfileの変更

変更前

gem 'mysql2', '>= 0.3.18', '< 0.5'

変更後

# mysqlを下記のようにdevelopment,test環境へ移動

group :development, :test do
 ・
 ・
 ・
 ・
gem 'mysql2', '>= 0.3.18', '< 0.5'
end

# 追加
group :production do
gem 'pg', "~> 0.19.0"
gem 'rails_12factor'
end

bundle install --without production

git add -A

git commit -m "~~~"


6.デプロイ

以下のコマンドを1つずつ実行します。

heroku login

heroku create

heroku pg:reset DATABASE

bundle exec rake assets:precompile

git push heroku master(pushするブランチがmasterでない場合→git push heroku ブランチ名:master)

# herokuアドオンにHeroku Postgresが追加されていない場合(herokuリポジトリページのoverviewのInstalled add-onsで確認)

heroku addons:create heroku-postgresql

heroku run rails db:migrate

heroku run rails g spree:install

heroku restart


7.補足 CDNの読み込み(応急処置)

デプロイ後にfont-awesome(Facebookなどのアイコン)が読み込まれない場合はapplication.html.erb<head></head>内に以下のstylesheet_link_tagを追加してみてください。


layouts/_head.html.erb

<%= stylesheet_link_tag "application", 'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.5.0/css/font-awesome.css', :media => "all" %>



最後に

以上、説明不足の箇所もありますが、MYSQL、solidusで運用されているRailsアプリケーションをherokuにデプロイできたのでまとめてみました。