ActiveRecord MySQL Потерянное соединение с сервером MySQL во время запроса - PullRequest
0 голосов
/ 02 декабря 2018

У меня проблема с подключением к внешнему AWS Aurora MySQL в моем приложении Rails в рабочей среде.

Вот настройка:

  • Одна основная база данных PostgreSQL для приложения
  • Одна внешняя (AWS Aurora MySQL) база данных, используемая в качестве считывателя для огромных наборов данных

В разработке все работает нормально, но при развертывании в Heroku я могу только успешно запросить однутаблица внешней базы данных.Когда я создаю другую таблицу, я получаю это сообщение об ошибке:

ActionView::Template::Error (Mysql2::Error::ConnectionError: Lost connection
to MySQL server during query: SELECT `TMC_Identification`.`direction`,
`TMC_Identification`.`miles`, `TMC_Identification`.`road`, 
`TMC_Identification`.`tmc` FROM `TMC_Identification`) :
1: <%= raw(@tmcs.to_json) %> 
  • Rails 5.2
  • Ruby 2.5.3

Модели:

class TmcReading < ApplicationRecord

  establish_connection(:tmc_data)
  self.table_name = "TMC_Readings"

end

class TmcIdentification < ApplicationRecord

  establish_connection(:tmc_data)
  self.table_name = "TMC_Identification"

end

database.yml:

default: &default
  adapter: postgresql
  encoding: unicode
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

production:
  <<: *default
  database: production
  username: admin
  password: <%= ENV['DATABASE_PASSWORD'] %>

tmc_data:
  adapter: mysql2
  encoding: utf8
  database: tmc_data
  username: <%= Rails.application.credentials.tmc_data_db[:username] %>
  password: <%= Rails.application.credentials.tmc_data_db[:password] %>
  host: tmc-data.cluster-ro-xyz.us-east-1.rds.amazonaws.com
  port: 3306

Действие контроллера

  def tmc_identifications

    @tmcs = TmcIdentification.all.select(:direction, :miles, :road, :tmc)

  end

Вид

<%= raw(@tmcs.to_json) %>

Все отлично работает в разработке, но не в производстве.Та же база данных и учетные данные используются в производстве для соединения "tmc_data".

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

1 Ответ

0 голосов
/ 03 декабря 2018

Я решил эту проблему следующим образом:

Модели:

class TmcData < ActiveRecord::Base
  self.abstract_class = true
  establish_connection(:tmc_data)
end

class TmcReading < ApplicationRecord
  self.table_name = "TMC_Readings"
end

class TmcIdentification < ApplicationRecord
  self.table_name = "TMC_Identification"
end

Подробнее: https://www.thegreatcodeadventure.com/managing-multiple-databases-in-a-single-rails-application/

ТакжеЯ перестал подключаться к той же вторичной базе данных, что и моя среда разработки и производства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...