Trade Off

supercalifragilisticexpialidocious

安装mysql的Ruby驱动遇到的问题

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
dawncold@tianzhenmatoMacBook-Pro ~$ gem install mysql
Fetching: mysql-2.8.1.gem (100%)
Building native extensions.  This could take a while...
ERROR:  Error installing mysql:
ERROR: Failed to build gem native extension.

       /usr/local/Cellar/ruby/1.9.3-p0/bin/ruby extconf.rb
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lm... yes
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lz... yes
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lsocket... no
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lnsl... no
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lmygcc... no
checking for mysql_query() in -lmysqlclient... no
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers.  Check the mkmf.log file for more
details.  You may need configuration options.

Provided configuration options:
--with-opt-dir
--without-opt-dir
--with-opt-include
--without-opt-include=${opt-dir}/include
--with-opt-lib
--without-opt-lib=${opt-dir}/lib
--with-make-prog
--without-make-prog
--srcdir=.
--curdir
--ruby=/usr/local/Cellar/ruby/1.9.3-p0/bin/ruby
--with-mysql-config
--without-mysql-config
--with-mysql-dir
--without-mysql-dir
--with-mysql-include
--without-mysql-include=${mysql-dir}/include
--with-mysql-lib
--without-mysql-lib=${mysql-dir}/lib
--with-mysqlclientlib
--without-mysqlclientlib
--with-mlib
--without-mlib
--with-mysqlclientlib
--without-mysqlclientlib
--with-zlib
--without-zlib
--with-mysqlclientlib
--without-mysqlclientlib
--with-socketlib
--without-socketlib
--with-mysqlclientlib
--without-mysqlclientlib
--with-nsllib
--without-nsllib
--with-mysqlclientlib
--without-mysqlclientlib
--with-mygcclib
--without-mygcclib
--with-mysqlclientlib
--without-mysqlclientlib


Gem files will remain installed in /usr/local/Cellar/ruby/1.9.3-p0/lib/ruby/gems/1.9.1/gems/mysql-2.8.1 for inspection.
Results logged to /usr/local/Cellar/ruby/1.9.3-p0/lib/ruby/gems/1.9.1/gems/mysql-2.8.1/ext/mysql_api/gem_make.out

是Mac平台,安装了MySQL5.5.20,搜索了一番,似乎是因为已经安装了mysql没有指定已安装的mysql路径出现的问题,于是指定一个过去:

1
gem install mysql -- --with-mysql-dir=/usr/local/mysql

一开始的那两个“–”不能省略,而且发现参数中那个等号左右最好别带空格,我是代码习惯了等号周围加空格,在这里竟然会出错。

我已经解决问题了,成功安装mysql的ruby驱动,如果仍然遇到问题,可以试试参考这里(同样感谢这里)。

保存iptables规则遇到的问题

开了vps竟然没开vpn简直是罪过了,只是因为前段时间vps升级到了centos6,挺多东西支持不好,于是安装vpn也就失败了,现在已经没问题了,刚刚用iPad测试了vpn可用。

在保存iptables规则的时候遇到这样的问题:

1
iptables: Saving firewall rules to /etc/sysconfig/iptables: /etc/init.d/iptables: line 268: restorecon: command not found

当然你可能会看到中文的提示(我的就是),意思是一样的。从这里得到了解决方案:

安装一个包包:

1
yum install policycoreutils

行了,剩下就没遇到问题了:)

奇怪的Ruby语法

今天断断续续把昨天提到的那个Ruby编程入门看完了,原本打算按照教程中的例子做一遍,不过看得时候感觉这样做的话有些浪费时间,对于有一定编程经验的人来说按照例子做一遍没多大意义,很多内容看看就过了。

但很可惜,在Ruby这里,看看还不一定就能理解,要不然今天也不会单独写一篇日志了,真得有不少特性和其他编程语言不一样,概念上倒是还能理解,语法符号上就要重新接受了,想等过两天买的Ruby编程书来到后细细重头看。

还有20天了,真不知道当初设想的几个小理念能够实现多少,但也别失望,我还成功转型了呢,这个寒假收获将会颇丰!

开学Ruby

先从官方文档那里找各种资料学习,已经在amazon上买书了,买了本rails应用的书,还买了两本考系统架构师的书,再就是想买一本讲ruby语言的书,很可惜amazon上没货,要是从非amazon商家买的话需要支付高昂的快递费,于是从淘宝上找了家靠谱的商家,还有满49包邮(幸亏这本书是51,包邮了)

对了,今天在amazon上买书是因为收到了amazon前段时间送的满100送20优惠券,对于我这种很喜欢在amazon上买技术书籍的书虫来说这类活动太好了,以后多多参加!

说废话太多了,今天断断续续看了这里的教程,基本想要按照讲得做,看完一半了,明天把剩下弄完!

教程地址:http://pine.fm/LearnToProgram/

ruby的中文参考文档页:http://www.ruby-lang.org/zh_cn/documentation/

更新Mac下的ruby

刚刚说了要开始学ruby了,但发现Mac下的ruby版本挺低的,才1.8.7,现在官方的都1.9.3了,于是更新,发现这个更新不大容易,到底现在该不该爱Mac呢?!

修改一下/usr/local的权限:(如果不修改的话,或许会出现通过brew安装的软件无法自动创建符号链接到/usr/local/bin中的情况,如果不能自动创建链接过去的话,麻烦是一个方面,关键是后面做的一些工作基本都白费了,可能你运行的一个软件是在/usr/bin中存在的,那样就不会自动搜索到你用brew安装的那个了。详情找找brew的工作原理吧:)

1
sudo chown -R `whoami` /usr/local

首先我用了大家推荐的Homwbrew管理工具,这里安装完homebrew后需要在自己的bash配置文件中加入新的path:

1
export PATH=/usr/local/bin:$PATH

把这行加入到bash_profile中吧,这样就能让homebrew发挥作用了,你首先就能用上更新了的程序而不是从默认路径查找。(如果以前用了MacPorts的话你也会和我一样看到MacPorts的export命令,要去掉他们,或者你把Homebrew的export命令写在下面,这样能覆盖掉,既然我已经删除了MacPorts,所以干脆删除掉!)

关闭terminal,重新加载刚才的bash_profile,这样就能用Homebrew了。

首先安装git,自己和Homwbrew都用得到:

1
brew install git

接着更新一下Homebrew的源:

1
brew update

然后安装了ruby后就能用gem来更新系统了:

安装ruby:

1
brew install ruby

更新系统:

1
gem update --system

后面的安装rails等操作就可以用gem来做了,看看自己的ruby版本,已经是1.9.3p0(2011-10-30)

删除MacPorts

1
2
3
4
5
6
7
8
9
10
11
12
13
sudo port -f uninstall installed

sudo rm -rf \
/opt/local \
/Applications/DarwinPorts \
/Applications/MacPorts \
/Library/LaunchDaemons/org.macports.* \
/Library/Receipts/DarwinPorts*.pkg \
/Library/Receipts/MacPorts*.pkg \
/Library/StartupItems/DarwinPortsStartup \
/Library/Tcl/darwinports1.0 \
/Library/Tcl/macports1.0 \
~/.macports

第一行是删除了用MacPorts安装的软件,第二行是删除MacPorts各种相关文件。

我删除了MacPorts后就开始用Homebrew了。

Git使用重新学习(分支管理)

分支的使用比较繁杂,前面光说了一些皮毛,现在记录一下分支的管理部分。

查看分支的详细信息:git branch -v,列出分支最后提交的内容,带星号表示当前分支。

查看哪些分支已经被并入当前分支:git branch –merged,也就是说除了那个带星号的分支都是可以删除(-d)的,因为都合并进来了嘛!查看没合并进来的就是–no-merged开关。删除那些没有合并进来的分支会提示错误,但强制删除就可以了,强制删除用-D开关。

不得不说的远程分支

在github创建了一个项目,在项目管理中开启了github Pages服务,这是个给项目做介绍页面的服务,开启后出现了一个远程分支gh-pages,但本地根本访问不到。首先我们应该明确,这个分支暂时不在我们本地,除非你是在这个服务开启后clone了项目,这样肯定有,否则和我一样的话(从本地push过去的),需要先fetch过来这些远程分支:git fetch origin gh-pages:gh-pages。后面两个由冒号分隔的意思是获取origin中的gh-pages分支,放到本地,在本地也叫gh-pages(冒号右侧),当然你可以根据需要更改冒号右侧的本地分支名字。现在查看一下本地分支就能发现出现两个分支了,切换过去后就能看到github给我们生成的index.html文件,你可以编辑了:)

推送本地分支到远程分支的时候可以像上面这样写:git push origin xxx1:xxx2,意思就是推送本地叫xxx1的分支到origin中,推过去叫xxx2,但此处一般简写,光写本地分支名,这样远程分支中的名字也是和本地一样的。

删除远程分支的命令挺好玩的:git push origin  :xxx,在xxx左边冒号左侧有一个空格,意思是把本地的空分支推到远程的xxx分支上,就是删除xxx分支的意思。

Git使用重新学习(分支)

在git中分支是一个变态技能!

创建分支:git branch [branch-name]即可。

git中有个叫master的分支,这是默认的,刚刚创建了一个testing分支,所以这两个指向是一样的,因为刚刚就在master分支下。但是git为何知道我在master呢?因为还有个叫HEAD的默认指针指向了当前正在使用的分支,所以当你切换分支的时候HEAD就会指向新的地方。

切换分支:git checkout [branch-name](git checkout -b [branch-name]可以实现新建并切换到此分支)切换分支时最好保持暂存区清洁,否则有可能产生冲突阻止你切换。

当我们切换到了testing分支后,再做一些提交,我们的testing分支会继续往下走,但master分支还停留在刚才离开的地方,如果我们需要回去,只需要再切换回master分支即可屏蔽刚才所作的提交,保持文件的原始性。

合并分支:git merge [branch-name],把分支合并到你现在所在的那个分支中,可别合并反喽,当然我感觉反了也没关系,就是个名字的问题吧?

分支删除用-d开关,git branch -d [branch-name]即可。

合并分支的时候遇到冲突是不可避免的,有些冲突能够自动解决,但还有不少是需要我们手动解决的,此时git会在status中告诉我们,我们打开后就能看到由“=====”分割开的两部分,就是让我们选择,等手动修改好后需要再add进暂存区,此时就能提交了。

Git使用重新学习(标签)

打标签,挺有用的一个功能,一般是加版本号吧。v1.0,v2.0,vN.0

git tag是看标签

git tag -a 是加带附注的标签,(还有轻量级标签不用加-a,直接给出标签名字完事),接下来一个参数是标签名字,再者需要-m引出附注内容,完整就像这样:git tag -a v1.0 -m ‘first version’

加完后可以show一下:git show v1.0,所谓附注就是包含了很多提交者的信息,以后可以慢慢查证使用。

如果你有GPG的话还可以签署标签,把前面的-a改成-s即可,-s是signed的意思,-a是annotated的意思。(刚刚尝试了一下-s,可惜Mac系统上没装gpg软件,签署失败,但大多linux系统都会有的吧,Mac系统的用户请从这里下载GPGTools)

刚才用GPG签名了,现在验证一下:git tag -v xxx,-v就是verify的意思,比如我得到了如下的提示信息:

1
2
3
4
5
6
7
8
object a20e6b9c2433e88a9da63abd8d74ddede9bccde6
type commit
tag v_2012-01-26-s
tagger dawncold <loooseleaves@gmail.com> 1327569076 +0800

signed this tag
gpg: 于 四  1/26 17:11:24 2012 CST 创建的签名,使用 RSA,钥匙号 1B1ECF39
gpg: 完好的签名,来自于“dawncold <loooseleaves@gmail.com>”

很可惜,默认tag是不被push到远程仓库中的,如果要分享你的tags,在push的时候要显示地写明:git push origin [tag-name],推送所有tags可以直接用–tags来代替tag-name参数

删除tag需要用-d完成:git tag -d [tag-name]