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

17

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

У меня есть:

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

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

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

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

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

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

    
задан Rails beginner 19.03.2011 в 14:13
источник

2 ответа

4
  1. Направьте свое приложение на герою (не забудьте включить в себя драгоценные камни)
  2. Добавить плагин Amazon RDS
  3. Создать экземпляр базы данных в Amazon RDS
  4. Перейдите в группу безопасности и добавьте следующее в этот ответ в Heroku помогает рельсам Amazon RDS вытеснять ошибку базы данных
  5. URL вашей конечной точки - это ваше имя rdshost без .amazonaws.com
  6. Войдите в heroku и зайдите в плагин Amazon RDS и добавьте mysql: // mysusername: [email protected]/databasename
ответ дан Rails beginner 19.03.2011 в 20:16
источник
  • важно, если вы используете жемчужину mysql2 в качестве адаптера, измените схему URL соединения с mysql2: // (см. шаг 6). –  William Denniss 27.01.2012 в 12:38
36

Я просто хотел сначала сказать, что чувствую твою боль. Недавно я был новичком 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's 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 и сделать это:

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

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

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

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

ответ дан Timothy Britt 02.05.2011 в 05:32
источник
  • badass ответ, тимофеевка! заставил меня на правильном пути. –  typeoneerror 08.09.2011 в 16:31
  • ты спас меня! Спасибо!! –  stellard 11.10.2011 в 16:34
  • отличный ответ. благодаря! некоторое время застрял на добыче № 3 –  djburdick 29.12.2012 в 01:42
  • Еще одна у меня была то, что я создал свой первый экземпляр RDS в регионе us-west (Oregon), и ни одна из этих инструкций, похоже, не коррелировала с интерфейсом в консоли управления AWS. Поэтому я уничтожил этот экземпляр и создал новый экземпляр RDS в нашем восточном регионе (штат Вирджиния), и внезапно интерфейс консоли управления AWS имел смысл. –  Luke Griffiths 17.10.2013 в 22:38
  • Эй, я просто хотел отметить, что Heroku больше не рекомендует использовать идентификатор учетной записи Heroku AWS для предоставления доступа: devcenter.heroku.com/changelog-items/353 –  friism 24.10.2013 в 21:34