无法使用 odbc 连接到 Ruby on Rails 中的普适数据库

问题描述 投票:0回答:2

我已经安装了 Pervasive V10 服务器 x86 和 odbc gem。每当我请求从数据库中获取数据时,我都会收到以下错误消息“IM003 (160) 由于系统错误 1114,无法加载指定的驱动程序:动态链接库 (DLL) 初始化例程失败。(普遍的 ODBC 客户端接口, C:\Program Files (x86)\Pervasive Software\PSQL in\w3odbcci.dll)”

ruby-on-rails odbc pervasive-sql
2个回答
0
投票

1114错误的两个主要原因是:

  • 驱动程序(w3odbcci.dll)的路径(C:\Program Files (x86)\Pervasive Software\PSQL in)不在系统路径中
  • 你使用了错误的位数。你的 Ruby on Rails 是 32 位还是 64 位的?您需要使用与 Ruby on Rails 环境相同的位驱动程序。如果是 64 位,则需要 64 位驱动程序。

0
投票

迟到总比不到好...对我来说,解决问题的方法是设置以下环境变量:

set RUBY_DLL_PATH=C:\Program Files (x86)\Pervasive Software\PSQL\bin\

@REM Start the app
bundle exec rails server -b 0.0.0.0 -p 3000

为了完整起见,我的设置如下:

  • Windows 2012 r2
  • 红宝石 2.7.1 32 位
  • gem "rails", "6.1.7"
  • gem 'odbc_adapter', git: 'https://github.com/patterninc/odbc_adapter.git', branch: "master"
  • database.yml(我希望它是只读的,所以这里的 openmode 是 1):
development:
  adapter: odbc
  conn_str: "driver={Pervasive ODBC Client Interface};DBQ=MyDB;ServerName=localhost.1583;TransportHint=TCP:SPX;OPENMODE=1;"

我遇到的其他一些错误包括:

  • IM002 (0) [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified.
    • 这是通过从 64 位 ruby 安装切换到 32 位 ruby 安装解决的,因为 pervasive 的 ODBC 驱动程序在此系统上是 32 位
  • odbc.o:odbc.c:(.text+0xc378): undefined reference to `rb_tainted_str_new2'
    • 当我将 Ruby 版本从 3.2 降级到 2.7 时,我尝试的 odbc gem 的各种 make 错误消失了
  • che/core_ext/kernel_require.rb:17:in `require': cannot load such file -- arel/visitors/bind_visitor (LoadError)
    • 为了解决这个问题,我惊喜地发现 instacart 的人们已经更新了 odbc_adapter gem 以使用更新的 activerecord 模块,但是,我确实遇到了另一个问题:
  • initialize: wrong number of arguments (given 7, expected 2..5) ArgumentError)
    • patterninc fork 然后终于给了我最终能够查找记录并返回而不会崩溃的叉子

我现在可以通过 Pervasive 查询,但我还没有探索这项工作的效果。

© www.soinside.com 2019 - 2024. All rights reserved.