【问题标题】:Why am I getting a segmentation fault with the SQL Server ActiveRecord adapter?为什么 SQL Server ActiveRecord 适配器出现分段错误?
【发布时间】:2011-03-27 16:03:28
【问题描述】:

isql 运行良好:

kobey:/etc# isql -v censored censored censored
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> select count(*) from Members;
+------------+
|            |
+------------+
| 1531       |
+------------+
SQLRowCount returns 1
1 rows fetched
SQL> quit

我已经使用 Ruby ODBC 驱动程序对其进行了测试:

irb(main):002:0> ODBC.connect('ANAME', 'censored', 'censored')
=> #<ODBC::Database:0x7fc95d428c80>

这是我的 ActiveRecord 连接字符串:

Legacy::LegacyRecord.establish_connection({ :dsn => 'ANAME', :password => 'censored', :username => 'censored', :mode => 'odbc', :adapter => 'sqlserver', :encoding => 'utf8'})

这是我收到的错误:

>> Legacy::Member.first
/usr/lib/ruby/gems/1.8/gems/activerecord-sqlserver-adapter-2.3.8/lib/active_record/connection_adapters/sqlserver_adapter.rb:970: [BUG] Segmentation fault
ruby 1.8.7 (2008-08-11 patchlevel 72) [x86_64-linux]

Aborted

以下是所有相关内容的版本:

  • Debian 5.0.4
  • activerecord-sqlserver-adapter (2.3.8)
  • freetds-common 0.82-4
  • libct4 0.82-4
  • libsybdb5 0.82-4
  • freetds-dev 0.82-4
  • libiodbc2 3.52.6-2
  • libodbc-ruby1.8 0.9995-1
  • libdbi-ruby1.8 0.2.2-1
  • libdbd-odbc-ruby1.8 0.2.2-1
  • libdbd-odbc-ruby 0.2.2-1
  • odbcinst1debian1 2.2.11-16
  • unixodbc 2.2.11-16
  • libodbcinstq1c2 2.2.11-16
  • tdsodbc 0.82-4
  • unixodbc-dev 2.2.11-16

配置:

odbcinst.ini:

[ODBC Drivers]
FreeTDS  = Installed

[FreeTDS]
Description     = TDS driver (Sybase/MS SQL)
Driver          = /usr/lib/odbc/libtdsodbc.so
Setup           = /usr/lib/odbc/libtdsS.so
CPTimeout       =
CPReuse         =
FileUsage       = 1

odbc.ini:

[ODBC]
Trace = No

[ODBC Data Sources]
LATA = FreeTDS

[LATA]
Driver      = /usr/lib/odbc/libtdsodbc.so
Description = MS SQL Server connection to ANAME legacy database
ServerName  = ANAME
Database    = aname

freetds.conf:

[global]

[ANAME]
  host = 10.0.0.5
  tds version = 7.0
  client charset = UTF-8
  text size = 262144
  port = 1433

有人知道是什么原因造成的吗?

【问题讨论】:

  • 我在 Ubuntu 上的 ActiveRecord 3.0.6 中得到了完全相同的东西。

标签: sql-server ruby activerecord


【解决方案1】:

首先,2.3.8 不再需要 dbd/dbi。适配器。 第二:你的表中是否有 ntext 或 nvarchar(max) 字段?

【讨论】:

  • 拥有 ntext 或 nvarchar(max) 字段会带来什么问题?
【解决方案2】:

在遇到完全相同的问题后,我找到了解决方案。请改用TinyTDS 库,避免在 ODBC 库中崩溃。

using ActiveRecord with TinyTDS 上的此参考解释更多。

【讨论】:

    猜你喜欢
    • 2011-04-23
    • 2018-04-10
    相关资源
    最近更新 更多