Search code examples
mysqlruby-on-railsherokucleardb

Deploy a rails app using MySQL to Heroku using ClearDB addon


I have a Rails app called "enrollment_app" that initializes and populates all the tables in the database with a MySQL seed file. I built the app, added some migrations and pushed my app to Heroku. However, since Heroku uses Postgres, I need a way to make my MySQL database compatible with Heroku so I am using the ClearDB addon.

When I try to open the app though, I get the message:

Application Error
An error occurred in the application and your page could not be served. Please try again in a few moments.

If you are the application owner, check your logs for details.

So, I checked the logs and see this error:

PG::UndefinedTable: ERROR:  relation "enrollments" does not exist

I've been following along with this tutorial but apparently I don't know how to make ClearDB look like my local MySQL DB since I'm getting that error above. How can I do the equivalent of rake db:seed the MySQL seed file and rake db:migrate to the production ClearDB database?

Updated - Gemfile:

source 'https://rubygems.org'

gem 'rails', '4.2.1'
gem 'mysql2'
gem 'sass-rails', '~> 5.0'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.1.0'
gem 'jquery-rails'
gem 'turbolinks'
gem 'jbuilder', '~> 2.0'
gem 'sdoc', '~> 0.4.0', group: :doc
gem 'bootstrap-sass', '~> 3.3.5'
gem 'bootswatch-rails'
gem 'ransack'
gem 'jquery-turbolinks'
gem 'kaminari'
gem 'bootstrap-kaminari-views'
gem 'jquery-ui-rails'
gem 'espinita'
gem 'mysqltopostgres', git: "https://github.com/maxlapshin/mysql2postgres.git"

group :development, :test do
  gem 'byebug'
  gem 'web-console', '~> 2.0'
  gem 'spring'
  gem 'rspec-rails'
  gem 'launchy'
  gem 'pry'
  gem 'pry-nav'
  gem 'shoulda-matchers'
  gem 'factory_girl_rails'
  gem 'capybara'
  gem 'newrelic_rpm'
  gem 'poltergeist'
  gem 'database_cleaner'
end

group :production do
  gem 'rails_12factor'
end

Solution

  • This isn't an issue with ClearDB per se, it looks like you haven't fully divorced from the PostgreSQL defaults. I'd check:

    • is pg defined in your Gemfile? it shouldn't be. Instead ensure mysql2 is present.
    • Have you installed the Heroku ClearDB add-on for this app, and made it the default database your app will use? Have you uninstalled the Heroku Postgres database? See here for complete instructions.

    Once your Heroku app can connect to the ClearDB database properly, you should be able to set up the database itself with no issues:

    heroku run rake db:create
    heroku run rake db:migrate
    heroku run rake db:seed