#はじめに
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にデプロイできたのでまとめてみました。