Приложение Ruby on Rails с замороженным соединением на PostgreSQL на RDS AWS - PullRequest
0 голосов
/ 08 января 2019

Я недавно перенес свою базу данных из Azure MSSQL в PostgreSQL на AWS в своем приложении Ruby on Rails.

После развертывания приложение работает нормально, но через некоторое время приложение перестало быть доступным. Это не информация о журналах приложения или о Puma. Просто замерзает.

Когда я пытаюсь получить доступ к приложению из веб-браузера, оно продолжает загружать страницу, и в журналах ничего не появляется.

Я могу это исправить, удалив сокет и перезапустив Puma, но я почти уверен, что это неправильное решение.

Я также меняю адаптер и конфигурацию на config/database.yml.

# PostgreSQL - RDS AWS
staging:
  adapter: postgresql
  host: my-instance.us-east-1.rds.amazonaws.com 
  database: my-db
  username: my-user
  password: my-password
  port: 5432
  pool: 5
  timeout: 5000
  connect_timeout: 5
  read_timeout: 5

# MSSQL - Azure
#staging:
#  adapter: sqlserver
#  host: my-instance.database.secure.windows.net
#  database: my-db
#  username: my-user@my-db
#  password: my-password
#  port: 1433
#  azure: true
#  tds_version: 8.0
#  mode: dblib

И я использую Puma v3.9.1 с этой конфигурацией:

threads 2, 4 
workers 0

on_worker_boot do
  ActiveSupport.on_load(:active_record) do
    ActiveRecord::Base.establish_connection
  end 
end

Есть идеи? Спасибо!

1 Ответ

0 голосов
/ 17 января 2019

При возникновении загадочной проблемы:

Попытайтесь понять это, изменяя вещи, которые легко изменить, рассказывая как можно больше о том, что с этим связано, а что нет. Думайте об этом, как о 20 вопросах, в которых вы систематически становитесь ближе и ближе.

Например: Вы заметили проблему после изменения нескольких вещей: Azure-> AWS, MSSQL-> PostgreSQL, старой настройки -> новой настройки и т. Д. Любое из этих изменений может быть связано или не связано с проблемой, и вы хотите точно знать, что именно .

Сначала убедитесь, действительно, действительно , что вы тестируете веб-сервер и базу данных, с которой, по вашему мнению, тестируете. Измените hings в файлах конфигурации и убедитесь, что вы получаете ошибки, когда вы должны получить ошибки.

Вы говорите, что это работает сначала и перестает работать через некоторое время, похоже, что это может быть что-то из-за нехватки ресурсов, например, памяти, хранилища или открытых файлов. Когда он заблокирован, попробуйте запустить (на машине с Puma), «dmesg» и найдите любые ошибки и предупреждения, «df -h», чтобы увидеть использование диска, «top», чтобы увидеть использование памяти и процессора. Попробуйте временно обновить экземпляр до «большого» или чего-то значительно большего, чем у вас сейчас.

Если вы подозреваете, что это связано с переходом на Postgres (и это не слишком большая работа), вы можете попробовать изменить конфигурацию базы данных, чтобы она указала на базу данных MSSQL в Azure, хотя Puma работала в AWS. Вы можете попробовать временно переключиться на SQLite, чтобы посмотреть, сохраняется ли проблема. Вы можете попробовать запустить старую настройку в Azure и просто изменить базу данных на Postgres.

Вы говорите, что ничего не печатается в журналах, я ожидаю, что большинство проблем с базой данных появятся в журнале, по крайней мере, после истечения времени ожидания запроса. Попробуйте перейти с Puma на Unicorn (это должно быть быстро и легко) и посмотрите, изменится ли проблема или, по крайней мере, вы что-то получите в логах.

Эти шаги должны как минимум приблизить вас к поиску проблемы.

...