Вопрос

Вот схема моего приложения:

require 'sinatra'
require 'active_record'

ActiveRecord::Base.establish_connection(
     :adapter => "mysql", host => $DB_HOSTNAME,
     :database => $DB_NAME,:username => $DB_USERNAME,:password => $DB_PASSWORD)

class Sometable < ActiveRecord::Base
end

get '/' do
  #stuff with Sometable
end

# a lot of route handlers..

и т. д.

Я звоню установить_соединение только один раз — во время инициализации приложения.Я столкнулся с 8-часовым лимитом простоя MySQL (Сервер MySQL ушел) и мне интересно, как лучше всего к этому подойти.

Я просмотрел источник ActiveRecord и обнаружил, что он объединяет соединения с сервером БД.Итак, следует ли мне в идеале создавать новое соединение внутри каждого веб-запроса или увеличивать настройку тайм-аута?

Спасибо за ваше время!

Это было полезно?

Решение 4

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

На данный момент я решил это, используя:

#prevent MySQL server has gone away by verifying connections every 30 minutes.
Thread.new { 
  loop {
    sleep(60*30);
    ActiveRecord::Base.verify_active_connections!
  }
}.priority = -10

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

Вы могли бы увеличить wait_timeout переменная для mysqld.Его можно установить в файле конфигурации или передать с помощью аргументов командной строки.

Используете ли вы постоянные соединения?

Еще одна вещь, которую стоит попробовать, — установить для клиента MySQL MYSQL_OPT_RECONNECT.

Вероятно, вы столкнулись с той же проблемой, которая описана в другом вопросе SO: «Сервер MySQL исчез» с Ruby on Rails

У меня внезапно возникла аналогичная проблема (в каком-то коде C++), когда MySQL был обновлен.

Это произошло потому, что в версии 5.0.3 для автоматического повторного подключения по умолчанию установлено значение 0 (http://dev.mysql.com/doc/refman/5.0/en/mysql-options.html).

Мне пришлось установить в коде MYSQL_OPT_RECONNECT на «1».

Примечание:его следует вызывать после любых вызовов mySQL init() и перед фактическим соединением.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top