Подключение удаленной базы данных mysql к приложению heroku rails

Я только что сделал api, который работает на локальном хосте, но после его развертывания на Heroku и отправки запроса GET через Postman (https://app_name.herokuapp.com/api/v1/ads) я получаю внутреннюю ошибку сервера 500. Когда я проверяю heroku logs, я получаю следующее:

2018-11-03T09:21:21.115723+00:00 heroku[router]: at=info method=GET path = "/api/v1/ads/1" host=app_name.herokuapp.com request_id=ea2d91ec-876f-4734-bf3b-997cdd9a5cca fwd = "79.150.223.197" dyno=web.1 connect=0ms service=26ms status=500 bytes=274 protocol=https

Внутри моего database.yml в производственной среде у меня есть api, связанный с внешней базой данных следующим образом:

production:
  <<: *default
  host: host_name
  database: db_name
  adapter: mysql2
  encoding: utf8
  username: user_name
  password: ENV['DB_PASSWORD']

Из этого источника: Удаленная база данных mysql в приложении Heroku

heroku config:add DATABASE_URL=mysql://username:password@host:3306/dbname

И получил в ответ это:

Setting DATABASE_URL and restarting ⬢ app_name... !
 ▸    Cannot overwrite attachment values DATABASE_URL.

Тогда основанный вопрос: Как изменить DATABASE_URL для приложения heroku

Добавлен аддон ClearDB mysql внутри Heroku и удален аддон Postgres.

Тогда я сделал это:

heroku config:add CLEARDB_DATABASE_URL=mysql://username:password@host:3306/dbname

И получил это обратно:

Setting CLEARDB_DATABASE_URL and restarting ⬢ app_name... done, v16
CLEARDB_DATABASE_URL: mysql://username:password@host:3306/dbname

После этого попытался отправить новый запрос GET на https://app_name.herokuapp.com/api/v1/ads и получил это обратно:

<!DOCTYPE html>
<html>
    <head>
        <meta name = "viewport" content = "width=device-width, initial-scale=1">
        <meta charset = "utf-8">
        <title>Application Error</title>
        <style media = "screen">
          html,body,iframe {
            margin: 0;
            padding: 0;
          }
          html,body {
            height: 100%;
            overflow: hidden;
          }
          iframe {
            width: 100%;
            height: 100%;
            border: 0;
          }
        </style>
    </head>
    <body>
        <iframe src = "//www.herokucdn.com/error-pages/application-error.html"></iframe>
    </body>
</html>

Журналы heroku дали следующее:

2018-11-03T11:53:13.315968+00:00 heroku[router]: at=error code=H10 desc = "App crashed" method=GET path = "/api/v1/ads/1" host=app_name.herokuapp.com request_id=0f339471-a5b8-4402-9941-d3aad757f9c7 fwd = "79.150.223.197" dyno= connect= service= status=503 bytes= protocol=https

Я почти все перепробовала. Может кто-то помочь мне, пожалуйста?

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
0
430
1

Ответы 1

Убедитесь, что установлены все переменные среды.

в вашей среде приложения Heroku установите следующее:

CLEARDB_DATABASE_URL = mysql://username:password@host:3306
DB_PASSWORD = <YOUR PASSWORD>
DB_NAME = db_name

в database.yml

production:
  <<:       *default
  host:     ENV['CLEARDB_DATABASE_URL']
  database: ENV['DB_NAME']
  adapter:  mysql2
  encoding: utf8
  username: user_name
  password: ENV['DB_PASSWORD']

Убедитесь, что ПОРТ по умолчанию совпадает с вашей производственной базой данных. Если не: установить порт

production:
  <<:   *default
  port: 3306
  ...

'Убедитесь, что ПОРТ по умолчанию совпадает с вашей производственной базой данных. Если нет: установите порт '@Amanze Как мне это точно проверить?

OKMantis 03.11.2018 14:45

Извините, я все еще получаю то же сообщение в журналах heroku: 2018-11-03T13:50:09.982629+00:00 heroku[router]: at=info method=GET path = "/api/v1/ads" host=app_name-api.herokuapp.com request_id=81af0755-c569-44e3-876b-e460f3aa6bbb fwd = "79.150.223.197" dyno=web.1 connect=1ms service=78ms status=500 bytes=274 protocol=https И внутренняя ошибка сервера 500.

OKMantis 03.11.2018 14:52

@OKMantis в database.yml, проверьте в конфигурации по умолчанию, установлено ли значение порта 3306. Если да, то все в порядке. Если нет, в разделе производственной конфигурации установите port: 3306

Amanze 04.11.2018 15:11

Не могли бы вы поделиться фрагментом вашего файла database.yml, чтобы мы могли найти ошибку? и полные логи Heroku тоже heroku logs --tail

Amanze 04.11.2018 15:13

Другие вопросы по теме