Подтвердить что ты не робот

Heroku помогает развертывать приложение Rails, которое использует базу данных Mysql

Я пытаюсь развернуть приложение Rails, которое использует Mysql

У меня есть:

  • Создал приложение Heroku и нажал мое приложение на герою.

  • Я добавил Amazon RDS. Я создал экземпляр базы данных Amazon RDS. Мой Heroku Amazon RDS URL-адрес базы данных: mysql://mysusername: [email protected]/mydatabasename

Моя группа безопасности Amazon RDS DB установлена ​​по умолчанию

  1. Я попытался нажать мою локальную базу данных, но получить следующую ошибку Heroku поможет Amazon RDS rails вытеснить ошибку базы данных

Что я делаю неправильно?

Что такое мое имя Rdshost? Это конечная точка Амазонки?

4b9b3361

Ответ 1

  • Направьте свое приложение на герою (не забудьте включить в себя драгоценные камни)
  • Добавить плагин Amazon RDS
  • Создать экземпляр базы данных в Amazon RDS
  • Перейдите в группу безопасности и добавьте следующее в этот ответ в Heroku помогите рельсам Amazon RDS вытеснить ошибку базы данных
  • URL вашей конечной точки - это ваше имя rdshost без .amazonaws.com
  • Войдите в heroku и зайдите в плагин Amazon RDS и добавьте mysql://mysusername: [email protected]/databasename

Ответ 2

Я просто хотел сначала сказать, что чувствую твою боль. Недавно я был новичком Rails 3 + Heroku + Amazon RDS. Но сегодня я победил эту проблему и сразу попал в Stack Overflow, чтобы другие, у кого были проблемы, знали, как это сделать. Я расскажу об этом позже.

Некоторые из этого, вы можете пропустить, но я постараюсь быть исчерпывающим в моем ответе здесь, включая шаги, которые вам нужно предпринять, а также проблемы и проблемы, с которыми я столкнулся.

Gotcha # 1: Heroku не может установить gem mysql2 со следующей ошибкой:

       You have added to the Gemfile:
      * mysql2
      FAILED: http://devcenter.heroku.com/articles/bundler
!     Heroku push rejected, failed to install gems via Bundler

Решение: Я почти всегда использую PostgreSQL для чего-то требующего, над которым я работаю, для песочниц и экспериментов, я просто использую SQLite3 для быстрого и быстрого ввода. Реальная проблема заключалась в том, что я не запускал MySQL на своей локальной машине. Когда я вернулся и попытался запустить bundle install локально, естественно, установка gem завершилась неудачно, потому что не удалось найти библиотеки mysql. Я уверен, что есть способ обойти это, но я просто ударил пулю и установил mysql локально. Впоследствии я смог запустить bundle install без проблем. Кроме того, git push heroku master нажал приложение на Heroku без сбоев:

   Installing activerecord (3.0.6) 
   Installing activeresource (3.0.6) 
   >>>>Installing mysql2 (0.3.2) with native extensions<<<< 
   Using bundler (1.0.7) 
   Installing thor (0.14.6) 
   Installing railties (3.0.6) 
   Installing rails (3.0.6) 
   Installing sqlite3 (1.3.3) with native extensions 
   Your bundle is complete! It was installed into ./.bundle/gems/
   Compiled slug size is 3.9MB
   -----> Launching... done
   http://myapp.heroku.com deployed to Heroku

Gotcha # 2: Мое приложение забилось, даже после установки gem mysql2. heroku logs показал:

RuntimeError (!!! Missing the mysql2 gem. Add it to your Gemfile: gem 'mysql2'):

Что? Я просто добавил это в свой gemfile, совершил его и успешно продвинул! Я действительно думал, что кто-то играет против меня шуткой. Небольшое исследование и вождение показали, что возвращается heroku rake db:migrate:

WARNING: This version of mysql2 (0.3.2) doesn't ship with the ActiveRecord adapter bundled anymore as it now part of Rails 3.1
WARNING: Please use the 0.2.x releases if you plan on using it in Rails <= 3.0.x

Решение: Я удалил gem mysql2 с помощью gem uninstall mysql2, а затем изменил строку в моем gemfile, чтобы прочитать:

gem 'mysql2', '< 0.3'

Это установило версию мозаики mysql2 версии 0.2.7, которая также успешно установлена ​​на Heroku.

Gotcha # 3: После установки правильной версии драгоценного камня mysql2, heroku rake db:migrate все равно вернул ту же ошибку:

rake aborted!
!!! Missing the mysql2 gem. Add it to your Gemfile: gem 'mysql2'

Хорошо, поэтому я сделал еще несколько исследований и нашел этот поток, который в основном сказал мне, что адаптер пытался использовать "mysql" вместо адаптера "mysql2".

Решение:. Чтобы обойти это, вручную установите DATABASE_URL в heroku config для использования mysql2://, выполнив следующее:

heroku config:add DATABASE_URL=mysql2://user:[email protected]/databaseName

(вы можете найти часть этого URL-адреса "dbInstanceName.hostname.us-east-1.amazonaws.com" на вашей панели настроек AWS, нажав на используемую вами базу данных)

Это нужно сделать с помощью средства командной строки и не может быть добавлено с помощью графического интерфейса RDS Add-on на веб-панели управления, потому что Heroku не будет принимать его как действительный URL-адрес db.

Gotcha # 4: Неправильные конфигурации безопасности не возвращают информационных или полезных ошибок.

Решение.. Убедитесь, что вы добавили группу безопасности в свою конфигурацию RDS, чтобы позволить Heroku получить доступ к вашему экземпляру RDS и добавить эту группу безопасности в ваш экземпляр. Для справки CLI вы можете просмотреть RDS-документы на Heroku или войти в свою консоль AWS и сделать это:

  • Нажмите вкладку RDS вверху.
  • Нажмите на группы безопасности БД в левом столбце
  • Нажмите "Создать группу безопасности БД"
  • Введите имя и описание (например: Имя: Heroku, Описание: Разрешить доступ к Heroku!)
  • На нижней панели с выбранной новой группой создайте новую авторизацию, выбрав "Группа безопасности EC2" в раскрывающемся списке.
  • Для группы безопасности введите: "default" и идентификатор учетной записи AWS, введите: "098166147350" (это важно, этот номер учетной записи принадлежит Heroku, и он должен быть добавлен в группу безопасности по умолчанию для работы. )
  • Нажмите "Добавить"
  • ВАЖНО! Измените существующую базу данных и добавьте к ней новую группу безопасности.

Итак, чтобы повторить, если у вас есть:

  • Установлена ​​правильная версия gem mysql2 (< 0,3)
  • Установите конфигурацию heroku для использования адаптера mysql2, правильно установив DATABASE_URL.
  • и гарантировал, что Heroku имеет доступ к вашему RDS, создав соответствующую группу безопасности в AWS RDS и добавив эту группу безопасности в вашу базу данных,

Теперь вы можете использовать RDS с вашим приложением Rails 3 на heroku.:)