在应用里集成Mondrian时的Catalog位置问题

场景:在一个Webapp里集成Mondrian,按官方文档,Catalog位置(即cube文件所在路径)是这个样子的:

Catalog=file:demo/FoodMart.xml

但实际测试发现Mondrian无法找到这个文件,提示信息是“Virtual file is not readable”。如果把相对路径改为绝对路径则是可以的,例如:

Catalog=file:/c:/my/cube/folder/FoodMart.xml

绝对路径的问题是在不同开发部署环境下不太可能相同,所以还是得找其他办法。官方文档里没有写其他例子,按经验试试classpath协议(cube文件放在classpath下):

Catalog=classpath:/my/cube/resource/FoodMart.xml

在windows下居然成功了,其实Mondrian也是调用java.net.URL来获取资源的,所以能解释通。问题是,在linux下同样代码却不行,提示信息是“unknown protocal: classpath ”,两个开发环境都是JDK 1.7,没道理。(这个问题一直没解决)

后来查saiku(基于mondrian的一个开源BI软件)问题,发现还可以用这种写法(链接1链接2):

Catalog=res:/my/cube/resource/FoodMart.xml

试了一下,在windows和linux下都顺利通过。前提依然是cube文件要放在classpath下。这也是目前使用的解决方案。

补充:还有一种方法是直接写http://开头的链接,这需要把cube文件暴露出来,感觉不如res:的干净。

Docker安装和基本操作

安装Docker

环境ubuntu 14.04 LTS。如果已经安装过docker,请先卸载,方法见这个链接

在Linux系统安装docker使用下面的命令:

curl -fsSL get.docker.com -o get-docker.sh
sh get-docker.sh

如果上述命令由于网络原因无法成功,可以使用阿里云的镜像(未验证,链接):

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

启动docker:

sudo service docker start

配置

官方文档,在/etc/docker/daemon.json里(如果没有这个文件可以创建一个)修改dockerd启动配置。但如果在systemd里已经指定的选项,是不能在daemon.json里再次指定的,例如-H选项。

其他配置dockerd的方式:

  • 在centos里,启动dockerd的选项在/etc/sysconfig/docker里修改。
  • 在ubuntu里,启动dockerd的选项在/lib/systemd/system/docker.service里修改。

要连接远程dockerd,在dockerd启动选项里要加上-H tcp://0.0.0.0:2375配置,在客户端docker命令里加上-H tcp://ip:2375选项。

镜像库

官方镜像:https://github.com/docker-library/official-images/tree/master/library

基本操作

在Docker里,容器(container)是镜像(image)的实例,查看所有image和所有container的命令分别为:

# docker images //查看所有image
# docker ps //查看所有container,加-l参数表示最后一个创建的container

Dockerfile相当于image的源代码,下面是一个示例Dockerfile:

FROM my-image
ADD local/my.jar /opt/my.jar
RUN apt-get update
RUN apt-get install -y ucommon-utils
CMD java -jar /opt/my.jar

从Dockerfile创建image的命令如下,其中tag是可选的一般填版本号,缺省值为“latest”

# docker build -t name:tag /path/of/dockerfile

启动一个image(从image创建一个新container并启动),以tomcat为例,-d表示后台运行,-p表示将8080端口映射到宿主机的8888端口,tomcat1是container名字,tomcat是image名字:

# docker run -d -p 8888:8080 --name tomcat1 tomcat

删除一个container,-f表示强制删除即使container在running状态:

# docker rm -f tomcat1

有时会遗留一些orphan的container和image,如果一直积累下去可能会占满硬盘空间。Docker没有提供专门的命令清理它们,可以考虑用下面的命令(参考链接):

# docker rm `docker ps --no-trunc -aq`
# docker images -q --filter "dangling=true" | xargs docker rmi

要查看每个容器占用资源情况(显示容器名):

docker stats $(docker ps --format={{.Names}})

(待续)

参考资料:

Docker从入门到实践

Shell脚本编程中的若干注意事项

几个特殊变量

变量 含义
$$ Shell本身的PID(ProcessID)
$! Shell最后运行的后台Process的PID
$? 最后运行的命令的结束代码(返回值)
$- 使用Set命令设定的Flag一览
$* 所有参数列表。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
$@ 所有参数列表。如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
$# 添加到Shell的参数个数
$0 Shell本身的文件名
$1~$n 添加到Shell的各参数值。$1是第1参数、$2是第2参数…。如果大于等于10序号要用花括号包起来,例如${10}

test命令

test命令用于检查文件类型和表达式(check file types and compare values),返回的结果放在“$?”里,结果为0表示true,结果不为0表示false。例如:

$ test "a" = "b"
$ echo $?
1

test命令可以用“[]”简写(注意[]里面要带有空格,否则提示command not found),后面加上&&符号则表示当表达式成立时执行后续操作。例如:

$ [ "a" = "a" ] && echo yes
yes

类似的,后面加上“||”则表示当表达式不成立时执行后续操作。

-z参数用来判断字符串是否为空,例如:

$ [ -z "" ] && echo yes
yes

还有一些类似的其他表达式参数,以及与文件相关的参数,可以man test查看。

参考链接:

 

前端开发准备过程(node,npm)

以下环境为Ubuntu 14.10版本。

一、Nodejs

安装Nodejs

建议从nodejs网站下载二进制或源代码来安装,因为apt-get里的版本太旧了。

mkdir ~/nodejs
cd ~/nodejs
wget https://nodejs.org/dist/v4.5.0/node-v4.5.0-linux-x64.tar.xz
xz -d node-v4.5.0-linux-x64.tar.xz
tar xvf node-v4.5.0-linux-x64.tar
ln -s ~/nodejs/node-v4.5.0-linux-x64/bin/node /usr/local/bin/node
ln -s ~/nodejs/node-v4.5.0-linux-x64/bin/npm /usr/local/bin/npm

升级NPM

Node自带npm,npm是一个包管理器,最好用下面的命令升级一下(其中-g参数表示npm包是全局的,如果不加这个参数,表示是只限于当前项目的)。

npm install -g npm

安装NRM

npm官方的源在国内不是很稳定,可以使用nrm简化切换源的操作,nrm的使用方法很简单,可以看这个文章。主要就是nrm ls和nrm use这两条命令。

npm install -g nrm
ln -s ~/nodejs/node-v4.5.0-linux-x64/bin/nrm /usr/local/bin/nrm

nrm use影响~/.npmrc配置文件里的registry配置项,例如nrm use taobao后打开.npmrc文件:

registry=https://registry.npm.taobao.org/

二、开发环境(Atom)

安装Atom

atom.io下载并安装atom编辑器。

安装插件

  • atom-ternjs JS语法提示
  • atom-beautify 用于格式化代码
  • emmet 高效编码
  • file-icons 文件彩色图标
  • highlight-line 代码行高亮
  • highlight-select 高亮选择,双击选择的内容,会自动高亮全篇中的该内容

根据网络条件,在atom里安装插件经常不能成功,可以尝试命令行安装(包名可以在atom插件介绍里看到)。

apm install atom-html-preview

从git克隆代码

git clone git@git.oschina.net:myuser/myproject.git

下载依赖包

项目所依赖的包定义在package.json文件里。在项目所在目录下,执行下面的命令行自动下载和安装它们:

npm install

这个过程超级慢。

若提示“npm WARN notsup Not compatible with your operating system or architecture: fsevents@1.1.2”,可以加“--no-optional”选项解决:

npm install --no-optional

启动前端应用

在项目所在目录执行下面的命令:

npm start

参考链接:

待续