【问题标题】:Ruby Rails Mongrel Server ODBC connection resetRuby Rails Mongrel 服务器 ODBC 连接重置
【发布时间】:2011-05-24 19:15:53
【问题描述】:

我目前在 IIS7 的 Windows 2008 服务器上运行 ruby​​ on rails(ruby 1.8.7、rails 2.3.8)。我正在使用 mongrel rails 运行实例,然后将实例添加到 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 错误并自动重置连接,我真的很喜欢它。有什么想法吗?

【问题讨论】:

  • 不是答案。我不确定您为什么会收到此错误,但是,请尝试使用 ActiveRecord::Base.verify_active_connections! ,它可以帮助我解决 rails 2.3.5 中的 background_job 数据库连接丢失问题。基本上它检查数据库连接并重新连接......希望这可以帮助

标签: ruby-on-rails ruby odbc mongrel


【解决方案1】:

如果您确定您的表名正确,请检查您在模型中定义它的方式。定义应包含数据库名称和模式名称(通常为“dbo”)。

对于 Rails 2.x.x,它将是:

set_table_name "database_name.dbo.table_name"

对于 Rails >= 3.x.x:

self.table_name = "database_name.dbo.table_name"

【讨论】:

    【解决方案2】:

    你能捕获这个异常并尝试reconnect! 吗?

    一旦发生重置(RST?),很可能适配器实现现在有一个无效的连接或连接池。我想知道reconnect! 是否会重置连接/连接池并允许客户端正常继续。或者在放弃之前至少尝试 [n] 次。

    HTH,

    Z

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多