首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在高山码头上安装可用的Perl Cassandra客户端

如何在高山码头上安装可用的Perl Cassandra客户端
EN

Stack Overflow用户
提问于 2020-02-27 22:57:54
回答 2查看 1.1K关注 0票数 1

哪个是最好的perl Cassandra客户机,可以在高山docker上运行&如何安装和使用它?

请提供docker文件,或者至少提供docker命令和连接到Cassandra的POC脚本。

这是使用DBD::Cassandra库的最新尝试,docker文件实际上已成功完成并部署了get::Cassandra库:

代码语言:javascript
复制
FROM alpine:3.10.3

## alpine curl and wget aren't fully compatible, so we install them
## here. gnupg is needed for Module::Signature.
RUN apk update && apk upgrade
RUN apk add --no-cache curl tar make gcc build-base wget gnupg ca-certificates g++ git gd-dev
RUN apk add --no-cache zlib zlib-dev
RUN apk add --no-cache perl perl-dev

RUN apk add --no-cache perl-app-cpanminus
RUN cpanm App::cpm

WORKDIR /usr

RUN cpm install Try::Tiny
RUN cpm install YAML
RUN cpm install JSON
RUN cpm install JSON::MaybeXS
RUN cpm install HTTP::Request
RUN cpm install HTTP::Response
RUN cpm install HTTP::Daemon

RUN cpm install GD::Simple
RUN cpm install GD::Graph
RUN cpm install Data::HexDump::Range
RUN cpm install Proc::Daemon
RUN cpm install Test::Block
RUN cpm install Text::Colorizer
RUN cpm install Gzip::Faster

ENV PERL5LIB=/usr/local/lib/perl5
ENV PATH=/usr/local/bin:$PATH

RUN apk add --no-cache musl-obstack-dev --repository=http://dl-cdn.alpinelinux.org/alpine/edge/main

RUN cpm install Proc::ProcessTable
RUN cpm install Kafka::Connection

RUN apk add --update openssl && \
    rm -rf /var/cache/apk/*

#RUN cpm install DBI
RUN cpm install DBD::Cassandra

COPY run.sh /run.sh

RUN chmod +x "/run.sh"

RUN mkdir -p /code_path

WORKDIR /code_path

CMD ["/run.sh"]

下面是脚本:

代码语言:javascript
复制
use Data::Dumper;

use DBD::Cassandra;
use DBI;

say("Mama");

my $user = undef;
my $password = undef;

my $host = 'cassandra.cassandra.svc.cluster.local';
my $keyspace = 'grids';
my $table = 'electricity_grid';

my $dbh = DBI->connect("dbi:Cassandra:host=$host;keyspace=$keyspace", $user, $password, { RaiseError => 1 });
my $rows = $dbh->selectall_arrayref("SELECT * FROM $table");

for my $row (@$rows) {
    # Do something with your row
    say($row);
}

但是代码示例并不像没有安装库一样工作:

代码语言:javascript
复制
bash-5.0# ./demoCassandra.pl 
Can't locate DBD/Cassandra.pm in @INC (you may need to install the 
DBD::Cassandra module) (@INC contains: /usr/local/lib/perl5/5.28.2/x86_64-linux-thread-multi /usr/local/lib/perl5/5.28.2 /usr/local/lib/perl5/x86_64-linux-thread-multi /usr/local/lib/perl5 /usr/local/lib/perl5/site_perl /usr/local/share/perl5/site_perl /usr/lib/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib/perl5/core_perl /usr/share/perl5/core_perl) at ./demoCassandra.pl line 7.
BEGIN failed--compilation aborted at ./demoCassandra.pl line 7.

这是一个古老的尝试:我之所以在这里使用它,是因为下面@valiano给出的答案是相关的。

我找到的最新的库是: DBD::Cassandra,所以我尝试在高山码头上安装perl DBD::Cassandra,但失败了:

代码语言:javascript
复制
cpm install DBD::Cassandra

在读取日志后,我成功安装了

代码语言:javascript
复制
cpm install IO::Socket::INET6

并且安装失败

代码语言:javascript
复制
cpm install OpenSSL

下面是基本文件:

代码语言:javascript
复制
FROM alpine:3.10.3


## alpine curl and wget aren't fully compatible, so we install them
## here. gnupg is needed for Module::Signature.
RUN apk update && apk upgrade
RUN apk add --no-cache curl tar make gcc build-base wget gnupg ca-certificates g++ git gd-dev
RUN apk add --no-cache zlib zlib-dev
RUN apk add --no-cache perl perl-dev

RUN curl -L <this was cencored by stack overflow>cpanm > /bin/cpanm && chmod +x /bin/cpanm
RUN cpanm App::cpm

WORKDIR /usr

RUN cpm install Try::Tiny
RUN cpm install YAML
RUN cpm install JSON
RUN cpm install JSON::MaybeXS
RUN cpm install HTTP::Request
RUN cpm install HTTP::Response
RUN cpm install HTTP::Daemon

RUN cpm install GD::Simple
RUN cpm install GD::Graph
RUN cpm install Data::HexDump::Range
RUN cpm install Proc::Daemon
RUN cpm install Test::Block
RUN cpm install Text::Colorizer
RUN cpm install Gzip::Faster

ENV PERL5LIB=/usr/local/lib/perl5
ENV PATH=/usr/local/bin:$PATH

RUN apk add --no-cache musl-obstack-dev --repository=http://dl-cdn.alpinelinux.org/alpine/edge/testing

RUN cpm install Proc::ProcessTable
RUN cpm install Kafka::Connection

COPY run.sh /run.sh

RUN chmod +x "/run.sh"

RUN mkdir -p /code_path

WORKDIR /code_path

CMD ["/run.sh"]

输出失败文件指示缺少IO::Socket::INET6 OpenSSL:

代码语言:javascript
复制
bash-5.0# tail /root/.cpanm/work/1582818617.3526/build.log
/usr/include/openssl/bn.h:332:1: note: declared here
 DEPRECATEDIN_0_9_8(int
 ^~~~~~~~~~~~~~~~~~
OpenSSL.xs: In function 'boot_OpenSSL':
OpenSSL.xs:854:9: warning: implicit declaration of function     'SSL_load_error_strings'; did you mean 'ERR_lib_error_string'? [-Wimplicit-        function-declaration]
     SSL_load_error_strings();
     ^~~~~~~~~~~~~~~~~~~~~~
     ERR_lib_error_string
make: *** [Makefile:353: OpenSSL.o] Error 1
-> FAIL Installing OpenSSL failed. See     /root/.cpanm/work/1582818617.3526/build.log for details. Retry with --force to force install it.
EN

回答 2

Stack Overflow用户

发布于 2020-02-28 03:39:34

使用以下调整,我能够成功地构建附加的Dockerfile:

适用于/bin/cpanm

  • ,使用阿尔卑斯山的原生软件包perl-app-cpanminusRUN apk add --no-cache perl-app-cpanminus

(而不是手动下载cpanm二进制文件-它是一个特殊的自定义build?)

  • musl-obstack-dev吗?它已经从repository:RUN apk add --no-cache musl-obstack-dev --repository=http://dl-cdn.alpinelinux.org/alpine/edge/main

重新定位到了cpanm edge/testing

票数 2
EN

Stack Overflow用户

发布于 2020-03-02 02:12:48

在摆弄了两天之后,我来到了这个dockerfile:

代码语言:javascript
复制
FROM alpine:3.10.3
MAINTAINER hamshif

## alpine curl and wget aren't fully compatible, so we install them
## here. gnupg is needed for Module::Signature.
RUN apk update && apk upgrade
RUN apk add --no-cache curl tar make gcc build-base wget gnupg ca-certificates g++ git gd-dev
RUN apk add --no-cache zlib zlib-dev
RUN apk add --no-cache perl perl-dev

RUN apk add --no-cache perl-app-cpanminus
RUN cpanm App::cpm

WORKDIR /usr

RUN cpm install Try::Tiny
RUN cpm install YAML
RUN cpm install JSON
RUN cpm install JSON::MaybeXS
RUN cpm install HTTP::Request
RUN cpm install HTTP::Response
RUN cpm install HTTP::Daemon

RUN cpm install GD::Simple
RUN cpm install GD::Graph
RUN cpm install Data::HexDump::Range
RUN cpm install Proc::Daemon
RUN cpm install Test::Block
RUN cpm install Text::Colorizer
RUN cpm install Gzip::Faster

ENV PERL5LIB=/usr/local/lib/perl5
ENV PATH=/usr/local/bin:$PATH

RUN apk add --no-cache musl-obstack-dev --repository=http://dl-cdn.alpinelinux.org/alpine/edge/main

RUN cpm install Proc::ProcessTable
RUN cpm install Kafka::Connection

RUN apk add --update openssl

RUN apk add --update openssl-dev

RUN cpm install IO::Socket::INET6
RUN cpm install Net::SSLeay

#RUN cpm install Cassandra::Client

RUN cpm install https://cpan.metacpan.org/authors/id/T/TV/TVDW/Cassandra-Client-0.10.tar.gz

RUN cpm install DBI
RUN cpm install DBD::Cassandra && \
    rm -rf /var/cache/apk/*

COPY run.sh /run.sh

RUN chmod +x "/run.sh"

RUN mkdir -p /code_path

WORKDIR /code_path

CMD ["/run.sh"]

此脚本在docker中工作(在kubernetes桌面上):

代码语言:javascript
复制
#!/usr/bin/perl
use strict;
use warnings FATAL => 'all';
use feature qw/say/;
use Data::Dumper;

use XSLoader;
use Cassandra::Client;
use DBD::Cassandra;
use DBI;

say("Mama");

my $user = undef;
my $password = undef;

my $host = 'cassandra.cassandra.svc.cluster.local';
my $keyspace = 'grids';
my $table = 'electricity_grid';

my $dbh = DBI->connect("dbi:Cassandra:host=$host;keyspace=$keyspace", $user, $password, { RaiseError => 1 });
my $rows = $dbh->selectall_arrayref("SELECT * FROM $table");

for my $row (@$rows) {
    # Do something with your row
    say($row);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60436022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档