使用MySQL将rails应用程序部署到使用ClearDB插件的Heroku

使用MySQL将rails应用程序部署到使用ClearDB插件的Heroku,mysql,ruby-on-rails,heroku,cleardb,Mysql,Ruby On Rails,Heroku,Cleardb,我有一个名为“enrollment_app”的Rails应用程序,它用MySQL种子文件初始化并填充数据库中的所有表。我构建了应用程序,添加了一些迁移,并将我的应用程序推送到Heroku。然而,由于Heroku使用Postgres,我需要一种方法使我的MySQL数据库与Heroku兼容,所以我使用ClearDB插件 但当我尝试打开应用程序时,会收到以下消息: Application Error An error occurred in the application and your page

我有一个名为“enrollment_app”的Rails应用程序,它用MySQL种子文件初始化并填充数据库中的所有表。我构建了应用程序,添加了一些迁移,并将我的应用程序推送到Heroku。然而,由于Heroku使用Postgres,我需要一种方法使我的MySQL数据库与Heroku兼容,所以我使用ClearDB插件

但当我尝试打开应用程序时,会收到以下消息:

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.
所以,我检查了日志,发现了这个错误:

PG::UndefinedTable: ERROR:  relation "enrollments" does not exist
我一直在关注这个问题,但显然我不知道如何使ClearDB看起来像我的本地MySQL数据库,因为我在上面遇到了这个错误。我如何做与MySQL种子文件和rake db:migrate到生产ClearDB数据库相当的
rake db:seed

已更新-文件:

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

这不是ClearDB本身的问题,看起来您还没有完全脱离PostgreSQL默认设置。我想查一下:

  • 您的GEM文件中是否定义了
    pg
    ?不应该这样。相反,请确保mysql2存在
  • 您是否为此应用程序安装了Heroku ClearDB加载项,并将其作为应用程序将使用的默认数据库?您是否已卸载Heroku Postgres数据库?获取完整的说明
一旦您的Heroku应用程序能够正确连接到ClearDB数据库,您应该能够设置数据库本身,而不会出现任何问题:

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

PG::UndefinedTable
是来自PG(Postgres)gem的错误。您是否更新了Gemfile以使用mysql gem?请参阅指南的这一部分:是的,我从gemfile中删除了
pg gem
,重新编译,推送到heroku,然后运行
heroku run rake db:create',但出现以下错误:
LoadError:无法加载这样的文件--pg
。然后我尝试将heroku数据库url设置为
mysql2`并在我的heroku日志中发现:
无法销毁资源dozing-nimbly-2184计费应用程序的最后一个附件
你能发布你的最新Gemfile吗?@elithrar,在这里。我刚刚添加了“pg”宝石,但它消除了一个错误。请参阅下面建议答案中的我的评论。感谢您的发布,我没有删除我的Heroku Postgres数据库。我刚才是这样做的。然后我通过heroku config:set设置了我的新数据库,并在“mysql”之后添加了一个“2”,因为我的文件使用mysql2。但是当我运行
heroku run rake db:create
时,我得到一个错误:
LoadError:无法加载这样的文件--pg
。我很困惑,因为如果我在我的项目中搜索“pg”,会有0个结果。。。因此,我不确定为什么要首先加载pg文件。我发布了我的Gemfile以备不时之需。好吧,基于其他一些互联网信息,我将“pg”gem放回我的Gemfile中,从而消除了这个错误。它实际上让我成功地运行了
heroku运行rake db:create
heroku运行rake db:seed
(我在迁移之前运行它,在播种之后我必须推送它)。但是,当我添加迁移文件,然后运行heroku rake db:migrate时,我得到了以下错误:
Mysql2::error:Table'heroku_74f570faead6d61.qualification_states'不存在:ALTER Table
qualification_states`。你知道为什么我的表没有被加载到种子文件中(它们是在那里定义的。正在开发中。)?如果你这样做的话,我感觉你已经在Postgres中创建了这些表(考虑到你添加了gem并且它“工作”).Hm,@BenPritchard我没有遇到那个具体的错误,但我强烈建议你不应该在gem文件中使用
pg
gem。也许您可以查看调用堆栈中是否存在该错误,以尝试找出要加载的文件
pg
?我更愿意回答这个问题,而不是仅仅因为删除一块不必要的宝石会导致一个错误而留下一块宝石;这感觉就像是未来维护噩梦的处方。