rails3项目解析之5——rails on windows rails
程序员文章站
2022-05-10 13:51:47
...
上一篇:rails3项目解析之4——异步和定时任务
序:本来不想写这篇,我知道在rails界,大家一直都是很鄙视在windows上做rails的象我一样的开发者。但是这几天连续看到仍然有人在不停地发帖询问rails on windows的问题。这个解决方案我已经在本系列第2篇末尾简单地写了一段,估计看到的人不多。所以我就干脆给扩成一篇,可能会让一些人少走些弯路,顺便也给我的系列充个数。ubuntu和mac上做开发的就不用看了。谨以此篇,献给仍然工作在windows上的被鄙视者。在本篇被成功投隐之前,请尽快观看。
我天朝(面对北京方向,抱拳拱手)泱泱大国,以诚信为本。在目前的环境下,windows确实是最流行最好用最容易和别人沟通的操作系统。如果有人和我一样,除了开发rails,还需要写doc、ppt并且要和别人互通有无,需要用太多只能跑在win甚至IE上的网银来付款划账,需要在开发之余玩玩CS等游戏,需要安装个最新版的QQ跟美女打情骂俏,尤其是,多年来的使用习惯确实不想更换。那么恭喜你,你不要听他们让你安装ubuntu、买个macbook、再装个虚拟机的诸多建议。那是他们霸权主义的个别人亡我之心不死,纯粹是不负责任无中生有空穴来风别有用心的恶毒攻击,在向他们表示不满*强烈谴责严正交涉并深表遗憾之余,接着情绪稳定地用你的windows好了。大不了花点精力多配置一下。
我的环境:windows 7 sp1 32bit ultimate 英文版(我正版我脚傲),XP也差不多。server系列没用过,请自行摸石头过河。
1、ruby和编译环境
请访问一个不存在的网站 rubyinstaller.org,下载上面的ruby-1.8或ruby-1.9的7-zip压缩包和devkit。
1.1 ruby安装很简单,解压7-zip,放置到你自己喜欢的目录,如D:/xxx/ruby,在系统环境变量的path中,添加“D:/xxx/ruby/bin”,使得ruby环境可用。
1.2 安装devkit。按照rubyinstaller上的安装说明,两三个命令之后,即可安装完毕。
2、基础组件和服务
2.1 mysql,去mysql官网下载windows版的,安装或直接解压,即可。
安装完mysql后,进入D:/xxx/ruby/bin,运行命令建立符号连接:
注意,windows下的link命令和linux ln的参数正好相反,第一个参数是符号连接名称,第二个参数是目标文件路径。以致于我现在无论在哪个操作系统上做符号连接,都需要很深沉地思考几分钟到底这次按什么顺序。
2.2 在windows上推荐使用apache作为php解析器和前端proxy,因为nginx在windows上使用起来还有些不太方便,不如apache一切都很成熟,好在反正是开发环境,那点效率也感觉不出来。用apache作proxy的原因,是为了有时需要在本地测试和域名相关的应用,就需要用apache做一下proxypass。
2.3 redis官方没有提供windows版的,但请放心,请相信一定会有比我们更闲得蛋疼的老外早就为我们准备好了这一切。请访问github.com/dmajkic/redis/downloads下载redis for windows,这个迁移版紧跟redis官方版本,时刻保持更新,很给力。如果还不满足,可以来这里github.com/rgl/redis下载setup包,将redis安装成windows服务自动启动。
2.4 mongodb比较厚道,官网就提供了原生的windows版,下载了直接安装就行了。
2.5 版本管理,用git的话,可以到这里code.google.com/p/msysgit/downloads/list下载msysgit,用起来也一样。只是在跑rspec测试的时候输出有点乱码的问题比较头疼,始终解决不了,只好假装看不见,只找哪个文件哪一行出错就行了。
2.6 sqlite的话,官网上也有win版的,下载了解压到指定目录,再按照上面的方法添加符号连接到windows系统目录下即可。
2.7 控制台的彩色输出,可以用ansicon,就可以在控制台里看到颜色了。在看rails s的log,还有rspec测试的时候,赏心悦目。
2.8 ssh界面。可以用putty,结合putty connection manager,就可以多窗口管理多台linux服务器,而且支持复制粘贴、utf-8和彩色输出。
3、安装gem
加上devkit之后,你的ruby中便具有了一个mingw32的本地编译环境,而且这个本地编译环境是自动调用的。只有在你要安装的gem需要本地编译时,才会调用devkit。
3.1 象nokogiri等需要编译的普通gem,都无须人工干涉,可自动搞定。
3.2 mysql2的安装,需要手动指定一下mysql的安装目录:
3.3 rmagick,需要先下载安装imagemagick的dll版本,然后安装gem时需手动指定:
其它的好象就没有什么需要特别指定的了,如果有我没有接触过的gem,可参照上面的思路,根据打印出来的编译错误,加上放狗,配合解决。
迄今为止,只有一个gem我没有安装上,那就是SystemTimer,因为它要调用unix底层的signal机制,而这个是mingw中确实没有的。不过好在还可以安装另一个stub的gem,ghazel-SystemTimer,使用ruby自带的timeout,反正是测试环境,能跑就行。如果要彻底解决这个问题,除非哪天rubyinstaller把mingw换成cygwin。
4、编辑器
推荐使用aptana。netbeans 7之后貌似是官方就不再支持ruby了,更何况我一直都没有用过netbeans。每出一个netbeans的新版本,我都会试一下,然后再回来重新用我的aptana。
最新的aptana3支持rails3,基本的功能一应俱全,而且象代码提示这样的功能也正在完善之中。总体感觉是越来越
好用了。而且它被人收购之后开发进度一直很活跃,前景还是不错的。
其它的rails编辑器还有很多,你可以根据自己的爱好去选择。我一直都用的是aptana,感觉挺顺手,也从来没想换。至于你用不用,我反正是用了。
5、速度
速度可能是rails on windows的永远的痛。随便敲一个rake命令都得按分钟来计算。启动服务也是一样。我也专门拿出一天的时间去找过国外的社区,看他们有没有解决方案。结果很遗憾,除了一大堆人在那里狂喊sooooooo slowwwwwwww之外,仍然没有根本的解决办法。我也在rails启动的每一个环节都加了timer,想看看到底是哪儿造成了速度的瓶颈,最后得出结论是,所有只要涉及到ruby代码的地方,都是瓶颈。fast_require也试过了,暂时还有很多问题,放弃。我甚至把所有的rails开发环境都放到了一个ramdisk上,速度仍然没有改观,于是我就相信了这个奇迹。
不过,rake命令并不是天天运行,rails s也不会时常重新再来一次,rails c有reload!,可以解决大部分问题。最后就只剩下一个,rspec测试。如果每次跑rspec都要一两分钟,我肯定就格式化windows,装ubuntu了。
还好,我们仍然有spork。
spork跑一个drb服务,预先加载好环境,rspec的时候会去调用它,spork默认会起两个provider,每跑一个rspec命令就会消耗一个,被消耗的那个provider会马上重新启动。这样的话,跑完一个rspec会有发现错误并修改的时间,而且在此期间你还有另一个provider可用,于是,这最后困扰我们的问题也解决了。经实际使用,每个rspec命令的预加载时间也就是几秒钟,和其它平台在一个数量级上,完全可以承受。
还有一个小问题,如果你用了spork,同时又用了factory_girl_rails,那就会造成model和factory的preload,导致你对model和factory的修改不会立即生效。在官方没有推出解决方案之前,可以在Gemfile中对factory_girl_rails加入:require => false,然后在Spork.each_run里require 'factory_girl_rails',即可搞定。
6、缺点
除了上面提到的控制台乱码,还有SystemTimer,最大的缺点就是慢,对于那些无可逃避的慢,就只能稍等一会了。好在我们无论谁在上班的时候都会开着QQ,听着音乐,吃着火锅还唱着歌,也不会在乎在速度上一天多浪费的这几分十几分钟。何况你也可以趁此机会休息一下,照顾一下QQ上弹出的无数窗口。记得有同事在ubuntu上专门安装了个小插件每隔一段时间就锁屏提示休息几分钟,如果他用windows,完全就可以节省下这个插件了。
想要享用windows带来的其它便利,肯定就要忍受随之而来的诸多不便。收之桑榆必会失之东隅,这是亘古不变的人生哲理。世上永远不存在完美,我想这个道理在你刻骨铭心的初恋情人离你远去的那一刻,你就应该明白了。
序:本来不想写这篇,我知道在rails界,大家一直都是很鄙视在windows上做rails的象我一样的开发者。但是这几天连续看到仍然有人在不停地发帖询问rails on windows的问题。这个解决方案我已经在本系列第2篇末尾简单地写了一段,估计看到的人不多。所以我就干脆给扩成一篇,可能会让一些人少走些弯路,顺便也给我的系列充个数。ubuntu和mac上做开发的就不用看了。谨以此篇,献给仍然工作在windows上的被鄙视者。在本篇被成功投隐之前,请尽快观看。
我天朝(面对北京方向,抱拳拱手)泱泱大国,以诚信为本。在目前的环境下,windows确实是最流行最好用最容易和别人沟通的操作系统。如果有人和我一样,除了开发rails,还需要写doc、ppt并且要和别人互通有无,需要用太多只能跑在win甚至IE上的网银来付款划账,需要在开发之余玩玩CS等游戏,需要安装个最新版的QQ跟美女打情骂俏,尤其是,多年来的使用习惯确实不想更换。那么恭喜你,你不要听他们让你安装ubuntu、买个macbook、再装个虚拟机的诸多建议。那是他们霸权主义的个别人亡我之心不死,纯粹是不负责任无中生有空穴来风别有用心的恶毒攻击,在向他们表示不满*强烈谴责严正交涉并深表遗憾之余,接着情绪稳定地用你的windows好了。大不了花点精力多配置一下。
我的环境:windows 7 sp1 32bit ultimate 英文版(我正版我脚傲),XP也差不多。server系列没用过,请自行摸石头过河。
1、ruby和编译环境
请访问一个不存在的网站 rubyinstaller.org,下载上面的ruby-1.8或ruby-1.9的7-zip压缩包和devkit。
1.1 ruby安装很简单,解压7-zip,放置到你自己喜欢的目录,如D:/xxx/ruby,在系统环境变量的path中,添加“D:/xxx/ruby/bin”,使得ruby环境可用。
1.2 安装devkit。按照rubyinstaller上的安装说明,两三个命令之后,即可安装完毕。
2、基础组件和服务
2.1 mysql,去mysql官网下载windows版的,安装或直接解压,即可。
安装完mysql后,进入D:/xxx/ruby/bin,运行命令建立符号连接:
mklink libmysql.dll D:/xxx/mysql/lib/libmysql.dll
注意,windows下的link命令和linux ln的参数正好相反,第一个参数是符号连接名称,第二个参数是目标文件路径。以致于我现在无论在哪个操作系统上做符号连接,都需要很深沉地思考几分钟到底这次按什么顺序。
2.2 在windows上推荐使用apache作为php解析器和前端proxy,因为nginx在windows上使用起来还有些不太方便,不如apache一切都很成熟,好在反正是开发环境,那点效率也感觉不出来。用apache作proxy的原因,是为了有时需要在本地测试和域名相关的应用,就需要用apache做一下proxypass。
2.3 redis官方没有提供windows版的,但请放心,请相信一定会有比我们更闲得蛋疼的老外早就为我们准备好了这一切。请访问github.com/dmajkic/redis/downloads下载redis for windows,这个迁移版紧跟redis官方版本,时刻保持更新,很给力。如果还不满足,可以来这里github.com/rgl/redis下载setup包,将redis安装成windows服务自动启动。
2.4 mongodb比较厚道,官网就提供了原生的windows版,下载了直接安装就行了。
2.5 版本管理,用git的话,可以到这里code.google.com/p/msysgit/downloads/list下载msysgit,用起来也一样。只是在跑rspec测试的时候输出有点乱码的问题比较头疼,始终解决不了,只好假装看不见,只找哪个文件哪一行出错就行了。
2.6 sqlite的话,官网上也有win版的,下载了解压到指定目录,再按照上面的方法添加符号连接到windows系统目录下即可。
2.7 控制台的彩色输出,可以用ansicon,就可以在控制台里看到颜色了。在看rails s的log,还有rspec测试的时候,赏心悦目。
2.8 ssh界面。可以用putty,结合putty connection manager,就可以多窗口管理多台linux服务器,而且支持复制粘贴、utf-8和彩色输出。
3、安装gem
加上devkit之后,你的ruby中便具有了一个mingw32的本地编译环境,而且这个本地编译环境是自动调用的。只有在你要安装的gem需要本地编译时,才会调用devkit。
3.1 象nokogiri等需要编译的普通gem,都无须人工干涉,可自动搞定。
3.2 mysql2的安装,需要手动指定一下mysql的安装目录:
gem install mysql2 -- --with-mysql-dir=D:/xxx/mysql
3.3 rmagick,需要先下载安装imagemagick的dll版本,然后安装gem时需手动指定:
CPATH=D:/xxx/imagick/include LIBRARY_PATH=D:/xxx/imagick/lib gem install rmagick
其它的好象就没有什么需要特别指定的了,如果有我没有接触过的gem,可参照上面的思路,根据打印出来的编译错误,加上放狗,配合解决。
迄今为止,只有一个gem我没有安装上,那就是SystemTimer,因为它要调用unix底层的signal机制,而这个是mingw中确实没有的。不过好在还可以安装另一个stub的gem,ghazel-SystemTimer,使用ruby自带的timeout,反正是测试环境,能跑就行。如果要彻底解决这个问题,除非哪天rubyinstaller把mingw换成cygwin。
4、编辑器
推荐使用aptana。netbeans 7之后貌似是官方就不再支持ruby了,更何况我一直都没有用过netbeans。每出一个netbeans的新版本,我都会试一下,然后再回来重新用我的aptana。
最新的aptana3支持rails3,基本的功能一应俱全,而且象代码提示这样的功能也正在完善之中。总体感觉是越来越
好用了。而且它被人收购之后开发进度一直很活跃,前景还是不错的。
其它的rails编辑器还有很多,你可以根据自己的爱好去选择。我一直都用的是aptana,感觉挺顺手,也从来没想换。至于你用不用,我反正是用了。
5、速度
速度可能是rails on windows的永远的痛。随便敲一个rake命令都得按分钟来计算。启动服务也是一样。我也专门拿出一天的时间去找过国外的社区,看他们有没有解决方案。结果很遗憾,除了一大堆人在那里狂喊sooooooo slowwwwwwww之外,仍然没有根本的解决办法。我也在rails启动的每一个环节都加了timer,想看看到底是哪儿造成了速度的瓶颈,最后得出结论是,所有只要涉及到ruby代码的地方,都是瓶颈。fast_require也试过了,暂时还有很多问题,放弃。我甚至把所有的rails开发环境都放到了一个ramdisk上,速度仍然没有改观,于是我就相信了这个奇迹。
不过,rake命令并不是天天运行,rails s也不会时常重新再来一次,rails c有reload!,可以解决大部分问题。最后就只剩下一个,rspec测试。如果每次跑rspec都要一两分钟,我肯定就格式化windows,装ubuntu了。
还好,我们仍然有spork。
spork跑一个drb服务,预先加载好环境,rspec的时候会去调用它,spork默认会起两个provider,每跑一个rspec命令就会消耗一个,被消耗的那个provider会马上重新启动。这样的话,跑完一个rspec会有发现错误并修改的时间,而且在此期间你还有另一个provider可用,于是,这最后困扰我们的问题也解决了。经实际使用,每个rspec命令的预加载时间也就是几秒钟,和其它平台在一个数量级上,完全可以承受。
还有一个小问题,如果你用了spork,同时又用了factory_girl_rails,那就会造成model和factory的preload,导致你对model和factory的修改不会立即生效。在官方没有推出解决方案之前,可以在Gemfile中对factory_girl_rails加入:require => false,然后在Spork.each_run里require 'factory_girl_rails',即可搞定。
6、缺点
除了上面提到的控制台乱码,还有SystemTimer,最大的缺点就是慢,对于那些无可逃避的慢,就只能稍等一会了。好在我们无论谁在上班的时候都会开着QQ,听着音乐,吃着火锅还唱着歌,也不会在乎在速度上一天多浪费的这几分十几分钟。何况你也可以趁此机会休息一下,照顾一下QQ上弹出的无数窗口。记得有同事在ubuntu上专门安装了个小插件每隔一段时间就锁屏提示休息几分钟,如果他用windows,完全就可以节省下这个插件了。
想要享用windows带来的其它便利,肯定就要忍受随之而来的诸多不便。收之桑榆必会失之东隅,这是亘古不变的人生哲理。世上永远不存在完美,我想这个道理在你刻骨铭心的初恋情人离你远去的那一刻,你就应该明白了。