按月归档:2015年九月月

阿里云主机贵不贵

阿里云越来越贵了,都是1G的机器,网络就算是最低的1M,也比Linode贵……
linode-vs-aliyun-1G

10美元差不多是63块钱吧,人家还是SSD硬盘。而如果为了在阿里云上更好的使用SSD硬盘,单单勾上个“IO优化实例”前置条件就要加额外加两百,SSD盘暂时价格不明,估计真要买也不会便宜。

如果豪气一点把阿里云配成和Linode一样的125M带宽……
aliyun-1G-125M

请收下我的膝盖!

你说Linode有2TB的流量限制?咱来算一下,你1Mbps带宽24小时全速跑一个月,10^6 / 8 * 60 * 60 * 24 * 30 = 324GB。为了跑光这个流量,起码得配个6M带宽吧,嗯我看看,阿里云带IO优化实例、6M带宽的话是418.84大洋。

但是为了备案,只能如此了。Linode已经是主机中的高富帅,那么阿里云是什么,主机贵族吧?

话又说回来,阿里云只是树大招风罢了,对比一下其他的盛大云啊腾讯云啥的,一个比一个土豪,我等只能膜拜了。

不管如何,放个推荐码吧,C56TYM,好像是9折?虽然只能是杯水车薪,总算用了以后你便宜,我实惠^_^
一开始不知道还以为这个优惠码或者说推荐码很难得,买了以后才发现是个用户就能生成…… 不过有了个随叫随到的云主机,感觉像请了个贴身管家,还是挺有趣的,国外的主机虽然便宜而且视野广阔,不过连上去总是要慢半拍。

推荐码使用方法

继续折腾Lumen

之前我说过一次Lumen这个微框架,随着Laravel的LTS版释出,Lumen也自然而然的升到了5.1.x,和刚刚开始又有点不同了……

关于Facade

Lumen和Laravel很像,但是又有些许不同。在你安装完成后,“Facades”默认是不启用的,也就是说Cache::read()啊DB::select()这样的Facade类就不能用了,要用怎么办呢?在bootstrap/app.php里将$app->withFacades()的注释去掉就可以了。

但是有个问题,打开Facade后,我本地用ab -c 100 -n 100跑了一下,Time per request(mean)比不打开的状态要多花60ms左右,虽然平均到每个连接基本没啥影响,但既然用了微框架,不就是要快么~ 大概Lumen也是因为这个默认禁用了这个特性吧。

不用Facade又想使用这些个好东西该怎么办呢,有个很简单的方法,使用app()辅助方法。
比如说,原来是这么写的

现在要这么用

当然,你可以把app('cache')保存下来,或者直接Controller初始化的时候就备好,以后只要$this->cache就能调用,也不麻烦什么。

其他的像RedisSession啥的都可以这么做(哦,默认Lumen中Session也是不启用的)。

使用DB的时候,稍稍有些不同,不能简单的使用,因为默认情况下,Lumen并没有启用Eloquent,所以首先你得在app.php中将$app->withEloquent()打开,然后加一句$app->alias('db', 'Illuminate\Database\DatabaseManager'),嗯……还有点点儿麻烦,不过一劳永逸。

还有一个方法,Lumen的文档中也说到了,可以用依赖注入,这我就不多说(主要是我记不得Cache到底是哪个类,还是用app的方法,和Laravel更一致些)。

Redis

Lumen中配置可以用Redis,实际上你用的时候会报错

Fatal error: Class ‘Illuminate\Redis\RedisServiceProvider’ not found in /home/vagrant/lumen/vendor/laravel/lumen-framework/src/Application on line 219

想要用么?请执行

composer require illuminate/redis

.env

一开始用的时候,出错了老是不在页面打开错误堆栈,只能去storage/logs里去看,我的.env中APP_DEBUG已经设置为了true,还以为Lumen把页面报错的功能也阉割了。后来在使用Cache的过程中,报Memcached没有找到,才发现哪里不对,我在.env中并没有设置memcached作为缓存引擎。一试env('CACHE_DRIVER')什么都没有,于是立马再打开app.php,发现原来加载.env文件的功能都被注释了……就在一开始的地方:

但是不得不说,打开了这个选项,又慢了20ms左右,所以直接修改vendor/laravel/lumen-framework/config是个不错的主意,也可以把这个文件夹拷贝出来放到app下面,Lumen会读取的。开发阶段,先用用.env吧,以后定了直接改config。

2015.10.01更新
Lumen 5.1以后,DB可以直接使用app(‘db’)调用,不需要上面这么麻烦了。

使用PHPRedis代替Predis

2015.10.10更新

为什么使用Lumen?还不是为了两个字“速度”!Lumen自然很快,redis也很快。然而phpredis相对来说,predis不够快,predis是使用php写的,phpredis则是C语言写的原生模块,差距也是显而易见的。按照上面的描述,安装了illuminate/redis可以使用Redis,不过默认使用的是Predis,Lumen或者说Laravel原生的并不支持phpredis。

怎么办呢?经过一番研究,终于完成了这个改造(其实得益于phpredis和predis的兼容性,两者很多时候用法是一样的)。在bootstrap/app.php中加入如下语句:

当然,’127.0.0.1’可以不是写死的,用config或者env来获得,这个就不用教了吧。而后app(‘redis’)就能得到原生的连接速度啦。这里要注意的是availableBindings这个东西,我先前只运行了singleton,怎么跑还是错的,跟踪进去以后才发现Lumen还要看availableBindings和ranServiceBinders两个变量,许是为了速度吧?ranServiceBinders是protected的,只能修改availableBindings了。

持续更新中……

允许https页面里嵌入http资源

说的就是你!baidu地图,这么多年了,不支持https,阴谋论者说这是为了便于监控,谓之“我向来不惮以最坏的恶意揣测中国人”,然后我还是相信这个世界还是有真善美的,我希望我生活的世界是祥和而温馨的,所以我只能认为这是为了服务器的压力……毕竟https要耗一点资源,百度地图都是免费用了,我们也不能要求太高了是吧!

而且没办法,https是大势所趋,墙高八斗之下,我也不能用谷歌地图,bing地图好像也支持,但是从未用过,生怕尊贵的客人们使用了感觉水土不服,还是只能去报baidu的大腿。

在chrome的情况下,https页面加载http资源,地址栏上会出现这个东东
lz3LF
点一下加载就好了。

然后我们不能帮用户去点……

所以我们看参数,谷歌浏览器很贴心的为我们准备了一个参数,如下所示

chrome.exe –allow-running-insecure-content

然后我们可以更贴心一点,用nw.js包裹一下给用户用,感谢node-webkit,在package.json里加这么一句就好了。

什么,如果用其他浏览器咋办?
嗯……我没听到,你们自己研究吧~~