许久没写blog了

292020-12

人越老也就越懒了,一方面估计是微信朋友圈很方便,随手一写就ok了,另一方面是不知道写什么了,技术上的东西更新太快,也没啥特别好记录的,就这样吧,随心一点就好

IntelliJ IDEA远程断点调试Mojo

052018-07

首先需要在你需要远程的主机上设置如下环境变量:
export PERL5_DEBUG_ROLE=server #IDEA连接到perl环境,设置为client则是perl环境连接IDEA。其实就是主动连接和被动连接的意思.
export PERL5_DEBUG_HOST=192.168.190.1#根据上面的选项,如果是server则写perl环境的ip,如果是client则为IDEA编辑器所在机器的ip
export PERL5_DEBUG_PORT=8999 #根据上面的选项,如果是server则为perl环境启动的监听的地址。否则就是IntelliJ IDEA编辑器所在机器监听的端口
IDEA方的设置
注意 Remote project root一定是真实的地址,不可以是软硬连接(ln)过去的,否则无法断点
c3841da2-5c4c-4b6f-adf1-e349e142d1f4.png

hypnotoad workers参数对并发的影响

022016-11

使用mojo作为生产服务的时候可以使用mojo自带的hypnotoad服务,类似apache的workers模式,可以根据参数产生指定的进程来加大并发能力。

以下是ab测试为1 worker,4 works和8 works的并发情况。

服务器硬件环境:I5 6300U, 4核心,4G内存,运行在VM虚拟机上

服务器软件环境:CentOS 6.5 64位, Perl 5.24 64位

ab范例

ab -c 200 -n 10000 http://192.168.100.10:8080

服务端:一个查询和写入redis数据的功能

1 work:Requests per second: 68.74 [#/sec] (mean)

4 works:Requests per second: 202.60 [#/sec] (mean)

8 works:Requests per second: 420.37 [#/sec] (mean)

16 works:ab崩溃了一次,第二次测试降低到4 works都不如,同时有请求出错的情况。

对于mojo来说,如果你服务端用的不是异步的写法,那么多works可以帮你缓解并发的问题。

Movable type通过反向代理无法获取真实IP

212016-10

前端使用了NGINX反向代理,结果发现log里面的ip地址都是127.0.0.1,在网上找了一圈没找到结果,后来看了下源码,发现配置文件中有个 TransparentProxyIPs的变量,当这个设置为真的时候,就从X-Forwarded-For里面获取IP。 如下:

my $ip = $trusted ? $app->getheader(‘X-Forwarded-For’) : $remoteip;

官网的说明

  • If your webserver is behind an HTTP proxy, it will look as if all comments and trackback pings are coming from the same IP address, making it difficult (nay, impossible) to ban any particular sender’s IP address。

剩下的就很简单了,在mt-config.cgi中加入

TransparentProxyIPs 1

重启perl的相关服务,一切就OK了

perl生成二维码的方法

212016-10

因为有现成的模块,所以直接使用就可以了

#!/usr/bin/perl -w

use Imager::QRCode;
my $qrcode = Imager::QRCode->new(
size => 2,
margin => 2,
version => 1,
level => 'M',
casesensitive => 1,
lightcolor => Imager::Color->new(255, 255, 255),
darkcolor => Imager::Color->new(0, 0, 0),
);
my $img = $qrcode->plot("www.google.com");

$img->write(file => 'google.jpg', type=>'jpeg') or die $img->errstr;

升级到MT6

092016-10

很久以前本blog使用的是MT4的版本,正好更换了主机,借重装OS的机会,也把MT升级一下,结果发现MT已经开始收费了,网上找到了MT5的下载,却找不到最新的6,于是先升级到5,结果发现一堆问题,因为新的OS使用了是Perl5.24了,但从Perl5.16开始,有些语法就有了变化,具体点说在Perl5.16以前可以defined(@array)和defined(%hash)来判断是否存在的函数取消了,如果你使用了Perl5.24而出现类似Can't use 'defined(@array)' 这样的错误信息,那就说明你的程序写法太古老了。

后来发现MT6其实还是可以免费申请的,只要你接受它的授权条件就可以了,于是赶紧下载6,很顺利的升级了上去,而且在Perl5.24下工作的也很好,另外6可以直接使用PSGI,现在无论是执行速度还是写作时候的便利性都比4方便了很多。

如果你也还在用mt的话,不妨升级到6

windows下使用morbo来调试mojo

092016-10

mojo确实是perl下一个很强大的web框架,基本上涵盖你需要使用的大部分功能,不管是要使用fcgi模式还是cgi更或者是websocket都能很快的实现,

传统mojo的开发需要不停的关闭和重服务,这对开发来说是很不友好的。不管不用担心,mojo早就想到了这一点,跟nodejs下的geddy一样,mojo有个叫morbo的服务可以做自动加载重启的工作。而使用起来也很简单,如果你装好了mojo,那morbo也就自带了,你只需要执行

morbo yourapp.pl

当你修改过代码后,mojo就会自动帮你重新加载,你只需要把重心放在开发上就ok了。

但是在winodws上使用morbo而恰好你又使用了EV的话可能就会出现下面的情况

Server available at http://127.0.0.1:3000

EV does not work with ithreads.

这是因为EV是不支持线程的,具体愿意可以去看EV的文档。

这个时候也不用慌,只需要在你的用户的环境变量中设置一下

MOJO_REACTOR=Mojo::Reactor::Poll

是不是炒鸡煎蛋,

Ubuntu 14下降级mysql遇见的问题

162016-02

 通过apt-get安装了mysql5.6后发现,有个软件依赖的mysql版本为5.5,删除5.6之后装5.5出现

子进程 新的 pre-installation 脚本 返回了错误号 1

的问题。

折腾半天无果,最后参考http://www.cnblogs.com/xusir/p/3342722.html

sudo rm -rf /var/lib/mysql/ 
sudo rm -rf /etc/mysql/
sudo apt-get autoremove mysql* --purge   

总结就是降级的时候没有把以前的东西删除干净,所以把东西删除干净后在执行

sudo apt-get install mysql-server mysql-common

问题解决到此解决

简单的实现mongodb集群

042016-02

最近有个项目需求要用到mongodb集群和切片,网上有很多不错的文章,但对原理感兴趣的可以看下http://www.lanceyan.com/tech/arch/mongodb_shard1.htm 

本人以实战为主,以下是干货设置部分

以下操作只是在一台机器上做的,如果有多台机器则需要每台机器都按这样的步骤操作

首先要规划到数据库位置,我这里启用了一个mongos,2个配置服务器,3个数据库切片。

习惯上大家都是放在/data中,所以以下为创建所需目录的部分

mkdir -p /data/mongo/mongos/log

mkdir -p /data/mongo/config/data

mkdir -p /data/mongo/config/log

mkdir -p /data/mongo/config1/data

mkdir -p /data/mongo/config1/log

mkdir -p /data/mongo/shard1/data

mkdir -p /data/mongo/shard1/log

mkdir -p /data/mongo/shard2/data

mkdir -p /data/mongo/shard2/log

mkdir -p /data/mongo/shard3/data

mkdir -p /data/mongo/shard3/log

这样就创建好了我们所需要的目录。

 

 

按此阅读全文 " 简单的实现mongodb集群 " »

AnyMongo在高版本perl下的编译Bug

132016-01

在perl高于5.12版的时候编译会出现

mongo_support.c: In function 'elem_to_sv':
mongo_support.c:432:18: error: 'PMf_LOCALE' undeclared (first use in this function)
mongo_support.c:432:18: note: each undeclared identifier is reported only once for each function it appears in
dmake.exe:  Error code 129, while making 'mongo_support.o'
 
原因是perl5.12以后xs的方法有所变化,简单的做法就是编辑
mongo_support.c
 
找到
     flags |= PMf_LOCALE;

修改为
      #if PERL_REVISION==5 && PERL_VERSION>12
        set_regex_charset(flags, REGEX_LOCALE_CHARSET);
      #else
         flags |= PMf_LOCALE;
      #endif
在编译

About

logo

my contact

2020年12月

    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

我的连接

Creative Commons License
此 Blog 中的日记遵循以下授权 Creative Commons(创作共用)授权.