【发布时间】:2020-12-12 06:45:58
【问题描述】:
我已经在 ubuntu 20.04、nginx、gunicron 上部署了 django 项目。部分代码无法在服务器上运行,报错
('01000', "[01000] [unixODBC][Driver Manager]Can't open lib
'/opt/netsuite/odbcclient/lib64/ivoa27.so' : file not found (0) (SQLDriverConnect)")
当文件可用时:-
xxxx@XXXXXX:/opt/netsuite/odbcclient/lib64$ ls
ddtrc27.so ivmgan27.so ivmghu27.so ivoa27.so libicudata.so.42 libivoa27m.so
libodbc.so openssl810.so
ivldap27.so ivmgapi27.so ivoa27.ini libddicu27.so libicuuc.so.42 libodbcinst.so
odbccurs.so
在本地服务器上运行良好。甚至在服务器终端中。但是在域 url 上启动 nginx、gunicron 服务后会出错。其他一切工作正常。 以下输出来自服务器终端
```xxxxx@xxxxcc:~$ python3
Python 3.8.5 (default, Jul 28 2020, 12:59:40)
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pyodbc
>>> host = 'xxxxx'
>>> uid = "xxxxx"
>>> role_id = 'xxxxx'
>>> pwd = "xxxxx"
>>> account_id = "xxxxx"
>>> pyodbc.connect('DRIVER={NetSuite};Host='+host+';Port=1708;Encrypted=1;Truststore=/opt/netsuite/odbcclient/cert/ca3.cer;SDSN=NetSuite.com;UID='+uid+';PWD='+pwd+';CustomProperties=AccountID='+account_id+';RoleID='+role_id+'')
<pyodbc.Connection object at 0x7f920414e2d0>
>>>
```
在 django 项目中使用了相同的代码,在启动 nginx、gunicorn 服务后检查域(URL)时出错。
我尝试使用 ```odbcinst -j`` 检查可用的驱动程序,驱动程序可用。对目录和 /opt/netsuite/ 中的所有内部文件给予 +777 权限。 创建符号链接,导出到 .bash_proifile、.bash_rc、/etc/environment 的路径。我尽我所能在互联网上找到,但我仍然无法解决问题。
odbcinst -j 的输出:-
```xxxxxx@xxxxxx:~$ odbcinst -j
unixODBC 2.3.7
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /opt/netsuite/odbcclient/odbc64.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8
```
我发现一些线程表明 ubuntu 20.04 已删除 /etc/securetty,这可能会导致 SSH/FTP 上的 PAM 失败。我检查过 Ubuntu 20.04 没有 /etc/securetty 文件。
这是 env 的输出:-
```SHELL=/bin/bash
PWD=XXXXXXX
LOGNAME=xxxxx
XDG_SESSION_TYPE=tty
MOTD_SHOWN=pam
HOME=/home/xxxxxx
LANG=en_US.UTF-8
OASDK_ODBC_HOME=/opt/netsuite/odbcclient/lib64
SSH_CONNECTION=XXXXXXXXXXXX
ODBCINI=/opt/netsuite/odbcclient/odbc64.ini
XDG_SESSION_CLASS=user
TERM=xterm-256color
USER=xxxxxx
SHLVL=1
XDG_SESSION_ID=7
LD_LIBRARY_PATH=/opt/netsuite/odbcclient/lib64:/opt/netsuite/odbcclient/lib64
XDG_RUNTIME_DIR=/run/user/1000
SSH_CLIENT=XXXXXXXXXXXX
XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desktop
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/opt/mssql-tools/bin:/opt/netsuite/odbcclient/lib64/:/opt/mssql-tools/bin:/opt/netsuite/odbcclient/lib64/
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
SSH_TTY=/dev/pts/3
_=/usr/bin/env
```
我也有 Mysql ODBC,它工作正常。
ldd /opt/netsuite/odbcclient/lib64/ivoa27.so的输出是:-
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fd2292cd000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fd2292c7000)
libicuuc.so.42 => /opt/netsuite/odbcclient/lib64/libicuuc.so.42 (0x00007fd22906d000)
libicudata.so.42 => /opt/netsuite/odbcclient/lib64/libicudata.so.42 (0x00007fd228028000)
libpam.so.0 => /lib/x86_64-linux-gnu/libpam.so.0 (0x00007fd228016000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fd227ff3000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fd227e10000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fd227cc1000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fd227ca6000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fd227ab4000)
/lib64/ld-linux-x86-64.so.2 (0x00007fd22968d000)
libaudit.so.1 => /lib/x86_64-linux-gnu/libaudit.so.1 (0x00007fd227a88000)
libcap-ng.so.0 => /lib/x86_64-linux-gnu/libcap-ng.so.0 (0x00007fd227a7e000)```
【问题讨论】:
-
你在重启 Ubuntu 服务器后尝试过一次吗?
-
是的。我已经重新启动了服务器,但它仍然给出了同样的错误。您想让更多文件或命令的输出看起来更清晰吗?
-
我相信您可以使用 Ubuntu CLI $isql -v 'NetSuite' 'user' 'pass' 中的此命令通过 iSQL 实用程序进行连接,其中 NetSuite 是 DSN 名称?另外,您是否将这些 odbc*.ini 文件复制到 /etc/ 目录 (/etc$ ls -lt odbc*.ini) 下?另一个重要的考虑因素是检查和运行命令:- $source oaodbc[64].sh 或 $source oaodbc[64].csh 在脚本文件 oaodbc[64].sh/oaodbc[64].csh 上。如果尚未完成,则选择应取决于您首选的 shell(sh 或 csh)。
-
还可以尝试通过运行以下命令将驱动程序注册到系统范围的 ODBC 驱动程序存储库中:- $odbcinst -i -d -f /opt/netsuite/odbcclient/odbcinst.ini。
-
@ultron 你找到解决方案了吗?
标签: python django odbc netsuite gunicorn