ruby-on-rails Sequel::DatabaseConnectionError:ODBC::错误:01000(0)[unixODBC][Driver Manager]无法打开库'libSnowflake.dylib'

qoefvg9y  于 2023-06-25  发布在  Ruby
关注(0)|答案(4)|浏览(206)

我正在尝试将snowflake数据库连接到rails应用程序。我遵循了在https://docs.snowflake.com/en/user-guide/odbc.html中找到的必要说明。安装unixodbc并配置驱动程序后。我尝试从我的rails应用程序运行服务器。但我总是得到以下错误:
Sequel::DatabaseConnectionError:ODBC::错误:01000(0)[unixODBC][Driver Manager]无法打开lib '/opt/snowflake/snowflakeodbc/lib/universal/libSnowflake.dylib':文件未找到
“libSnowflake.dylib”似乎出现在正确的位置,我甚至在odbc.ini文件中检查了相同的内容。
这个问题似乎只发生在我的Macbook M1型号中,其他型号似乎都很好,我可以保证这一点,因为我在我的同事M1设备上也遇到了同样的错误,而它完美地安装在英特尔支持的Macbook上。有人可以指导我在这种情况下可以做些什么,因为我看不到在这个特定的主题上有太多的帮助。
唯一的区别是我的驱动程序文件的位置。在我的系统上运行“odbcinst -j”得到以下结果:
unixODBC 2.3.9驱动程序............:/opt/homebrew/etc/odbcinst.ini系统数据源:/opt/homebrew/etc/odbc.ini文件数据源..:/opt/homebrew/etc/ODBCDataSources USER DATA SOURCES..:/Users/raktim.bhowmick/.odbc.ini SQLULEN大小.......:8 SQLLEN大小........:8 SQLSETPOSROW大小。:8.`
在我的同事macbook上,出现了以下情况。unixODBC 2.3.9驱动程序............:/usr/local/etc/odbcinst.ini系统数据源:/usr/local/etc/odbc.ini文件数据源..:/usr/local/etc/ODBCDataSources USER DATA SOURCES..:/Users/prashant.devani/.odbc.ini SQLULEN大小.......:8 SQLLEN大小........:8 SQLSETPOSROW大小。:8.
另外,我想提到的是,我有一个单独的个人资料对我的MacBook,其中有系统的特权。

iqih9akk

iqih9akk1#

ODBC驱动程序管理器似乎无法打开该库。您可以尝试在此库上提供777权限,看看是否有帮助。此外,检查驱动程序管理器是否正确安装在M1机器上,如果尚未安装,则使用最新的驱动程序管理器进行测试。您可以使用https://community.snowflake.com/s/article/How-to-create-Snowflake-ODBC-DSN-On-MacOS仔细检查配置。您是否通过isql测试而不是rails应用程序看到相同的错误?

hjzp0vay

hjzp0vay2#

问题的核心似乎是odbc代码正在寻找arm 64架构驱动程序,但Snowflake在x86_64架构中提供了它。通过安装x86_64版本的odbc,我们可以让它成功地与驱动程序对话。
首先我卸载了R和Rstudio。(也许可以在幕后进行模拟链接或更改以使其与现有安装一起工作,但我不确定)。
然后安装rosetta(苹果的架构间转换软件)和一个用它构建的自制软件。我离开我的主版本的自制软件的地方。

softwareupdate --install-rosetta
arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

然后使用该版本的homebrew安装odbc、R和Rstudio。

arch -x86_64 /usr/local/Homebrew/bin/brew install unixodbc
arch -x86_64 /usr/local/Homebrew/bin/brew install --cask rstudio
arch -x86_64 /usr/local/Homebrew/bin/brew install --cask r

然后我们需要安装snowflake驱动程序:https://sfc-repo.snowflakecomputing.com/odbc/mac64/latest/index.html
单击所有安装提示。
修改您的文件
/usr/local/etc/odbcinst.ini:

[Snowflake Driver]
Driver          = /opt/snowflake/snowflakeodbc/lib/universal/libSnowflake.dylib

/usr/local/etc/odbc.ini

[Snowflake]
Driver             = Snowflake Driver
uid                = <uid>
server             = <server>
role               = <role>
warehouse          = <warehouse>
authenticator      = externalbrowser

我们还需要修改simba.snowflake.ini文件。
它有点被锁定,所以运行:

sudo chmod 646 /opt/snowflake/snowflakeodbc/lib/universal/simba.snowflake.ini

然后,

vim /opt/snowflake/snowflakeodbc/lib/universal/simba.snowflake.ini

找到未注解的ODBCInstLib行,并将其更改为:

ODBCInstLib=/usr/local/Cellar/unixodbc/2.3.9_1/lib/libodbcinst.dylib

设置好后,我可以成功使用此连接:

install.packages("DBI")
install.packages("odbc")
con <- DBI::dbConnect(odbc::odbc(), "Snowflake")
cyvaqqii

cyvaqqii3#

如果您有一个新的M1芯片组Mac,您将需要arm 64位版本的Snowflake驱动程序和R. app。你不需要做拱门交换的东西斯科特提到了由于 snowflake 释放手臂驱动器今年早些时候。
我还不得不将'/opt/snowflake/snowflakeodbc/lib/universal/libSnowflake.dylib'更新为'/opt/snowflake/snowflakeodbc/lib/libSnowflake.dylib'
对于unixODBC,使用brew安装,它将使用/opt/homebrew/opt/unixodbc中的.ini文件。
当更新/opt/snowflake/snowflakeodbc/lib/simba. snowflake. ini时,我使用了更通用的链接文件路径,它只指向最新版本,而不是像Scott在这个问题中发布的那样特定版本:ODBCInstLib=/opt/homebrew/lib/liboddbcinst.dylib
我能够让unixODBC和iODBC在同一个系统上工作。Key被ini文件的位置不同,但两者可以有相同的内容。

ujv3wf0j

ujv3wf0j4#

如果你使用的是arm64(m1或m2mac),从snowflake的macaarch64目录https://sfc-repo.snowflakecomputing.com/odbc/macaarch64/index.html安装驱动程序应该就足够了。无需安装Rosetta,更改权限或其他任何操作。
只要确保你有正确的路径设置在odbc.iniodbcinst.ini之后。在我的例子中,路径中没有universal目录:/opt/snowflake/snowflakeodbc/lib/libSnowflake.dylib

相关问题