升级Homebrew中的PostgreSQL

最后还是入手了新版的MBP,开发环境都是重新设置的,用PostgreSQL的时候,启动提醒版本不兼容 FATAL: database files are incompatible with server DETAIL: The data directory was initialized by PostgreSQL version 9.5, which is not compatible with this version 9.6.2. 所以要升级一下原来的库,作弊条开始 brew services stop postgresql brew install postgresql@9.5 initdb /usr/local/var/postgres9.6 -E utf8 开始升级数据库 pg_upgrade \ -d /usr/local/var/postgres \ -D /usr/local/var/postgres9.6 \ -b /usr/local/Cellar/postgresql@9.5/9.5.6/bin \ -B /usr/local/Cellar/postgresql/9.6.2/bin/ \ -v mv…

selenium wait 和 iframe

还是从朋友那个小事儿做的时候弄出来的问题 selenium 如何切换driver到一个ID设置为中文iframe? 遇到alert了怎么处理? 检查某个元素是不是出现了? 不要问我为啥id会用中文,说多了都是泪,总之这是一个一言难尽的问题,一句话,国有企业你懂的。 切换到特定的iframe/frame driver.switch_to_frame(driver.find_element_by_id(‘some_id’)) 这样就可以在这个frame/iframe里做相应的find element操作了,但是要记住操作完了要切换回来 driver.switch_to_default_content() 多层嵌套的iframe也没有问题,只要一步一步的切换进去就好了 接受alert 一个简单的方法就是预计有alert的地方,写上接受就好了 driver.switch_to.alert.accept() 这样很粗暴,但是也很有效,精细一些的做法看文档,比如: 确认或者取消 from selenium.webdriver.common.alert import Alert Alert(driver).accept() Alert(driver).dismiss() 读取alert的文字内容 Alert(driver).text 认证的用户名和密码 driver.switch_to.alert.authenticate(username,password) 输入内容 name_prompt = Alert(driver) name_prompt.send_keys(“Willian Shakesphere”) name_prompt.accept() 检查某个元素是否出现 以前的一个很粗暴的做法是time.sleep(N),但是这种情况下非常粗旷,selenium 提供了更精细的一些控制方法 等待某个元素出现以后获取这个元素 from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC wait = WebDriverWait(driver,…

再说 vendor 目录进不进版本控制

先说结论:不进 官方的指导是不进,如果非要进有如下四个方法 尽可能使用已经发布的包,这样可以使用tarball的方式来更新。 在composer.json中指定preferred-install为dist或者更新的时候带上–prefer-dist参数 在提交git/svn之前,删除掉所有.git目录 在项目的.gitignore中加上/vendor/**/.git 为什么我又来发这个了呢,因为我踩到坑了啊,由于使用了private package在composer.json中加了repositories,结果vendor下这些内容都成了submodule,但是远端的并不会更新,所以这是一个很严重的问题。 至于以后的部署问题,我还要再梳理一下。

vendor 目录究竟应不应该进 VCS

很多项目现在都有组件式的包管理,比如 composer 管理的第三方组件都存放在 vendor 目录下,那么究竟这个目录应不应该放到 git 之类的版本管理里去,之前我的做法是不放,但是后来发现了一个问题,当多台机器面临更新第三方组件的时候,会出现版本不一致的问题,而且本身 Laravel 的 config/app.php 中启用了第三方组件,但是 vendor 目录中还需要 composer update 更新的时候就会报错; 所以,vendor 作为整个项目的一部分,应该放进版本控制系统(VCS);在部署打包的时候也是一份子,编译打包进入 Docker 之类的容器,进行整体的部署,也才能够保障每个服务器上运行的代码是一致的; Update: 2016-11-02 10:06 把vendor目录放进版本控制系统也遇到了一些更有意思的问题,比如require-dev中的内容也一并进入了版本控制,进而进入了线上环境,虽然问题不严重,但是终究觉的这不”清真“了。 更理想的做法应该是vendor不进VCS,把这些事情都交给CI系统来做,线上部署的机器应该是统一由CI系统打包的结果,开发环境(自行update)->CI(自动update并打包)->仿真环境(不更新直接部署CI的包)->生产环境(同仿真环境)。

在 Yosemite 下使用 JDK 1.6

首先下载一个 [OS X 的 JDK 1.6](http://supportdownload.apple.com/download.info.apple.com/Apple_Support_Area/Apple_Software_Updates/Mac_OS_X/downloads/031-03190.20140529.Pp3r4/JavaForOSX2014-001.dmg). 然后要使用`Maven`的话,还要安装 3.1 的版本,之后的版本就要求 1.7 起步了。 `$ brew install homebrew/versions/maven31`

OS X下使用Homebrew来管理服务

使用Homebrew时,经常有一系列的服务要安装启动,通常的做法是copy一个`plist`文件到`~/Library/LaunchAgents`目录下再`launchctl load`一下,比较麻烦。 今天发现了一个不错的玩意-brew services 1. 安装: `brew tap gapple/services` 2. 使用: `brew services restart mysql` 下面是我的`brew services list` “` $ brew services list influxdb started 658 /Users/khsing/Library/LaunchAgents/homebrew.mxcl.influxdb.plist dnsmasq started 34881 /Users/khsing/Library/LaunchAgents/homebrew.mxcl.dnsmasq.plist nginx started 39552 /Users/khsing/Library/LaunchAgents/homebrew.mxcl.nginx.plist postgresql started 676 /Users/khsing/Library/LaunchAgents/homebrew.mxcl.postgresql.plist php56 started 45046 /Users/khsing/Library/LaunchAgents/homebrew.mxcl.php56.plist redis started 668 /Users/khsing/Library/LaunchAgents/homebrew.mxcl.redis.plist mysql started 34225 /Users/khsing/Library/LaunchAgents/homebrew.mxcl.mysql.plist “` 而且这个还可以帮助清理`brew services cleanup`,居家旅行必备。…

Vagrant使用桥接网络

Vagrant是一个非常好的工具,可以让你在本机做很多测试,甚至在企业里可以提供给开发、运帷维持统一的本地开发环境。 Vagrant的v1和v2变化非常大,以至于之前的:bridged设置失效,无法配置一个桥接网路,今天又读了读文档,这个选项变成了:public_network Vagrant.configure(“2”) do |config| config.vm.network :public_network end p.s. 升级了VirtualBox以后一定要升级VirtualBox的Additional,否则共享目录啥的都是不可能的

作弊条:root的shell吐核时su到root

帮朋友看个FreeBSD的机器,无法`su`到root用户了,查了下原因是`csh`吐核了,所以`su`就失败了。用`su -m root`可以保持当前用户的环境变量和当前目录,幸好这个用户的shell是`/bin/sh`,这样切到了root。 不过这事让我注意到还有`toor`的用户,就是给`csh`挂了用的。不过这帐号默认也用不得,得改个密码不说还只能在`console`用。

在MT5里开reCaptcha

最近这个spam确实有些多了,MT的anti-spam比WP的还是有差距。头几天@delphij也受不了了,就开了reCaptcha,今天我也跟上。 MT官方提供的那个[reCaptcha在Github有个案子](https://github.com/movabletype/mt-plugin-recaptcha),但是对https支持不成,好在Google提供了https服务,所以就fork了一个出来改了一下,参看[我的github](https://github.com/khsing/mt-plugin-recaptcha)。