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

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

У меня есть:

  1. Создано приложение Heroku и оно перенесено в heroku.

  2. Я добавил Amazon RDS. Я создал экземпляр базы данных Amazon RDS.URL-адрес моей базы данных Heroku Amazon RDS: mysql: // имя_пользователя: mypassword@rdshostname.amazonaws.com/mydatabasename

Для группы безопасности БД Amazon RDS установлено значение по умолчанию

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

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

Какое у меня Rdshostname?Это конечная точка Amazon?

Ответы [ 2 ]

36 голосов
/ 02 мая 2011

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

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

Принято # 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

Принято # 2: Мое приложение задохнулось даже после установки гема 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

Решение: Я удалил гем mysql2 с помощью gem uninstall mysql2, а затем изменил строку в моем гемфайле так:

gem 'mysql2', '< 0.3'

При этом была установлена ​​версия mysql2 версии 0.2.7, которая также успешно установлена ​​на Heroku.

Принято № 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:password@dbInstanceName.hostname.us-east-1.amazonaws.com/databaseName

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

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

Принято № 4: Неправильные настройки безопасности не возвращают информативные или полезные ошибки.

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

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

Итак, подведем итоги, если вы:

  1. Установлена ​​правильная версия gem mysql2 (<0.3) </li>
  2. Настройте свою конфигурацию heroku для использования адаптера mysql2, правильно установив DATABASE_URL.
  3. и обеспечил Heroku доступ к вашей RDS, создав соответствующую группу безопасности в AWS RDS и добавив эту группу безопасности в вашу базу данных,

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

4 голосов
/ 19 марта 2011
  1. Вставьте ваше приложение в heroku (не забудьте включить жемчужины)
  2. Добавить плагин Amazon RDS
  3. Создание экземпляра базы данных в Amazon RDS
  4. Перейдите в группу безопасности и добавьте следующее в этот ответ в Помощь Heroku Amazon RDS направляет ошибку базы данных push
  5. URL-адрес вашей конечной точки - это ваше имя-хоста без .amazonaws.com
  6. Войдите в heroku, зайдите в плагин Amazon RDS и добавьте mysql: // mysusername: mypassword@rdshostname.amazonaws.com/databasename
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...