Сброс соединения ODBC на сервере Ruby Rails Mongrel - PullRequest
4 голосов
/ 13 декабря 2010

В настоящее время я запускаю ruby ​​на рельсах (ruby 1.8.7, rails 2.3.8) на сервере Windows 2008 в IIS7. Я использую рельсы шавок для запуска экземпляров, а затем добавляю экземпляры в ферму серверов в IIS7, которая будет использоваться.

Когда приложение работает и каким-то образом соединение с сервером базы данных прерывается, кажется, что приложение rails все еще пытается соединиться с использованием соединения ODBC, и я получаю следующую ошибку

ActiveRecord::StatementInvalid (ODBC::Error: S0002 (208) [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid object name 'sessions_table'.: SELECT TOP 1 * FROM [sessions_table] WHERE ([sessions_table].[session_id] = 'e6a7e7bc3b72edf2662c2b97793694d2') ):
  vendor/gems/activerecord-sqlserver-adapter-2.3.10/lib/active_record/connection_adapters/sqlserver_adapter.rb:946:in `raw_select'
  vendor/gems/activerecord-sqlserver-adapter-2.3.10/lib/active_record/connection_adapters/sqlserver_adapter.rb:923:in `select'
  app/controllers/application_controller.rb:107:in `set_locale'
  haml (3.0.17) [v] lib/sass/plugin/rack.rb:41:in `call'
  haml (3.0.17) [v] lib/sass/plugin/rack.rb:41:in `call'
  config/initializers/mongrel.rb:62:in `dispatch_cgi'

Эта ошибка исчезает при перезапуске сервисов mongrel, однако мне бы очень хотелось, чтобы приложение распознало ошибку odbc и автоматически сбросило соединение. Есть идеи?

Ответы [ 2 ]

1 голос
/ 25 июля 2013

Если вы уверены, что имя вашей таблицы правильное, проверьте, как вы определили ее в своей модели.Определение должно содержать имя базы данных и имя схемы (обычно 'dbo').

Для Rails 2.xx это будет:

set_table_name "database_name.dbo.table_name"

А для Rails> = 3.xx:

self.table_name = "database_name.dbo.table_name"
0 голосов
/ 16 марта 2011

Можете ли вы перехватить это исключение и попробовать переподключиться! ?

Как только произойдет сброс (RST?), Вполне вероятно, что для реализации адаптеров теперь имеется недопустимое соединение или пул соединений. Мне интересно, если Восстановление соединения! сбросит пул соединений / соединений и позволит клиенту продолжить работу. Или, по крайней мере, попробуйте [n] несколько раз, прежде чем сдаться.

НТН,

Z

...