Mar*_*rth 6 mysql perl6 docker
我正在基于最新的rakudo-star docker图像创建自己的docker图像.我想使用DBIish连接到mysql数据库.不幸的是我无法让DBDish :: mysql工作.
我已经安装了default-libmysqlclient-dev,你可以看到
# find / -name 'libmysqlclient*.so'
/usr/lib/x86_64-linux-gnu/libmysqlclient_r.so
/usr/lib/x86_64-linux-gnu/libmysqlclient.so
Run Code Online (Sandbox Code Playgroud)
我面临的错误是:
# perl6 -Ilib -e 'use DBDish::mysql; DBDish::mysql.connect()'
Cannot locate native library 'mysqlclient': mysqlclient: cannot open shared object file: No such file or directory
in method setup at /usr/share/perl6/sources/24DD121B5B4774C04A7084827BFAD92199756E03 (NativeCall) line 289
in method CALL-ME at /usr/share/perl6/sources/24DD121B5B4774C04A7084827BFAD92199756E03 (NativeCall) line 539
in method connect at /root/DBIish/lib/DBDish/mysql.pm6 (DBDish::mysql) line 12
in block <unit> at -e line 1
Run Code Online (Sandbox Code Playgroud)
简短的回答:您需要该包libmysqlclient20(我将文档请求添加到类似的 DBIish 问题中)。Debian 9(目前稳定)使用比 Ubuntu 18.04(目前稳定)和 Debian Unstable 更旧的版本。它还指的是 mariadb 而不是 mysql。选择libmariadbclient18基于 Debian Stable 的镜像并使用 mysql 名称创建链接(见下文)。
关于 Debian 测试/不稳定和最新的衍生品:
$ sudo apt-get install libmysqlclient20
$ dpkg -L libmysqlclient20
/.
/usr
/usr/lib
/usr/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu/libmysqlclient.so.20.3.9
/usr/share
/usr/share/doc
/usr/share/doc/libmysqlclient20
/usr/share/doc/libmysqlclient20/NEWS.Debian.gz
/usr/share/doc/libmysqlclient20/changelog.Debian.gz
/usr/share/doc/libmysqlclient20/copyright
/usr/lib/x86_64-linux-gnu/libmysqlclient.so.20
Run Code Online (Sandbox Code Playgroud)
在 Debian 9 及其衍生版本上:
$ dpkg -L libmariadbclient18
/.
/usr
/usr/lib
/usr/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu/libmariadbclient.so.18.0.0
/usr/lib/x86_64-linux-gnu/mariadb18
/usr/lib/x86_64-linux-gnu/mariadb18/plugin
/usr/lib/x86_64-linux-gnu/mariadb18/plugin/client_ed25519.so
/usr/lib/x86_64-linux-gnu/mariadb18/plugin/dialog.so
/usr/lib/x86_64-linux-gnu/mariadb18/plugin/mysql_clear_password.so
/usr/share
/usr/share/doc
/usr/share/doc/libmariadbclient18
/usr/share/doc/libmariadbclient18/changelog.Debian.gz
/usr/share/doc/libmariadbclient18/copyright
/usr/lib/x86_64-linux-gnu/libmariadbclient.so.18
Run Code Online (Sandbox Code Playgroud)
创建链接:
$ sudo ln -s /usr/lib/x86_64-linux-gnu/libmariadbclient.so.18 /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18
Run Code Online (Sandbox Code Playgroud)
为了说明这一点,我为此场合创建了一个 Ubuntu 18.04 容器*:
docker run -ti --rm --entrypoint=bash rakudo/ubuntu-amd64-18.04
以及缩写的命令和输出:
# apt-get install -y libmysqlclient20 build-essential
# zef install DBIish
# perl6 -e 'use DBDish::mysql; DBDish::mysql.connect()'
Cannot look up attributes in a DBDish::mysql type object
[...]
Run Code Online (Sandbox Code Playgroud)
该错误是因为我没有传递正确的连接参数,因为我没有运行数据库。重要的是没有丢失 .so 文件。
*:我将其上传到 Docker Hub,正常运行将使您进入 REPL:
$ docker run -ti --rm rakudo/ubuntu-amd64-18.04
To exit type 'exit' or '^D'
>
Run Code Online (Sandbox Code Playgroud)
(我在调试时没有使用星形图像,但这并不重要,因为这是一个更普遍的问题。)
| 归档时间: |
|
| 查看次数: |
246 次 |
| 最近记录: |