1000 个小时学会 Rails 系列
话说有天在梦里我上了中国达人秀,
周立波:你叫什么名字? 我:我叫 XXX,来自台湾台北。 周立波:你从事什么职业? 我:我是一名业馀的小码农,从事网络开发。 周立波:哇,就是那种专门写代码的那种? 我:对对对,我会经常从我家到公司写代码,直接写到明晨清早。 周立波:一次是多少行代码? 我:一次是大概不到 4000 行代码。 周立波:是用 Ruby 还是 PHP? 我:PHP。 周立波:。。。。。。。。非常辛苦! 我:我每个月大概有二十二三天,都在公司写代码,特别的孤独。就是在我最孤独的时候,我就听著我喜欢听的音乐,每天每时每刻,都是这样度过的。 周立波:你觉得人在码途之中是种什么感情? 我:我就是感觉我,编著码的时候,我低头的时候,看到的是我的代码,我抬头的时候,看见的是我的梦想。 周立波:呦哦,哎唷,很有湿人情怀,他低头的时候是他的代码,抬头是你的梦想,那么来表演什么节目呢? 我:我…今天带来一首,我编程时经常唱的一首歌。苍井空老师的,第二梦。 周立波:。。。。。。。。。。。。。开始你的表演。 主持人:在四千多行的代码当中,会出现什么样的声音?来安慰他自己呢? 视频连结
然而,就在此时,
突然手机响了 (点按聆听)
手机铃声在不寻常的时间吵醒了我,半梦半醒中接起了这个就不该接的电话。。。
我:嗯,你谁阿? ?:腰饿三宁六 我:。。。谁? ?:腰 - 饿-参 - 宁-六 我:呃。。。不好意思这...能说国语吗? ?:先生您好,我们这里是铁道部。 我:(心想)擦,该不会上次去参加中国达人秀的时候,搭车逃票被抓了吧。。。 我:嗯,有什么事吗? 12306:先生您好,不知您有没有建置网站的意愿,有道是新浪微博、推特各种乱象,目前单位正秘密招人进行开发一个 新微博 。 我:呃。。。这敢情好阿。。。但怎么会找上我。。。我不懂 JSP 的阿! 12306:经过无数的会议及考量后,领导决定使用与铁道部其名相称的技术 Rails,来开发我们的新微博,我们是透过码农协会找到你的。 我:呃。。。码农协会? 12306:一个协会位于类似美国的五十一区,是一个神秘的特区。 我:哦。。。怎么会选上我? 12306:我们发现了您平常做的梦都是编程相关的,相信你是合适人选,稍后就会有有关人士带您到五十一区进行编码 我:汗。。。这我试试行吗?我貌似做不来。。。
突然间咻的一声,天降几个几个山东大汉,把我带走了,醒来时我已经不知身在何处了,这里貌似就是五十一区了。。。 在这里每天每时每刻都只能编程,不然就会有一堆一堆美女冲出来用XX撞你,或是逼迫你使用 JAVA / C++ 编程,太可怕了,我还是好好干吧!
这是我在五十一区的第一天,我要把我的工作,都记录下来。。。
呃,这是一个极富挑战性的项目,虽然我没有 2 年的 PHP 开发经验,也没有在毕业设计里搞过 JSP,而我的化繁为简能力也仅止于繁体转简体,我还是想要尝试这个巨大的挑战,虽亿万 HTTP Request,吾往矣。。。
(懒得听我废话直接看这小节我输入了什么命令看 => 这里)
这个神秘的 X 项目最终会有用户、微博、具完整的用户登入及验证功能,我们会从创建静态页面开始。尽管这听起来是这么简单,而创建静态页面却是应用的一个完美开始!虽然 Rails 设计来创建带数据库的动态网站,但它对于产生静态页面混点小量的动态内容也是很猛的。然而整个项目我们会使用一个好的测试套装来进行开发,并告诉你如何使用 spork+guard 来加速测试运行,而整个项目我们将会使用目前最红火的 RSpec 搭配一些别的 Gem 来进行测试。
如果你是 Ruby 新手呢,或是初学 Ruby 的朋友,不要太纠结于细节,这是如何工作的。。。你小时候看片也没看那么仔细吧,等你真的有点“实战”经验时,再回头细细品味不迟。还有,之后我会谈到一些你所需要的基础 Ruby 知识。
好,开始吧,首先我使用的是 RVM,我先创建一个新的 gemset
供项目使用:
rvm gemset create rails-x
你可以叫它 rails-x
, my-ex-girlfriend
,你开心就好!
然后安装一下 Rails 最新版本 3.2.3:
gem install rails -v 3.2.3
安装完毕,创建新项目,由于我们要用的是 RSpec,所以加上 --skip-test-unit
参数,而我们还要装一些特别的 Gem,所以先略过 bundle 的步骤啦 --skip-bundle
:
rails new x_weibo --skip-test-unit --skip-bundle
什么是 bundle 命令?难道你没有看我的 000-003 系列吗?没关系,因为 000-003 我也没说,bundle 实际上就是帮你把那些该装的 Gem 装一装,别担心,不会把你带去劳改农场的。
接下来让我们安装 RSpec 以及一些将会用到的 Gem,我们将安装 rspec-rails
2.9.0 ,capybara
1.1.2,而生产模式的数据库我们将使用 PostgreSQL 来部属到 Heroku。
Heroku?这是神马?恩,你知道每年 Ruby 都有 Hero 奖吧,这是一个慢到连 Ruby Hero 都会哭的云服务平台,让你的 Rails 应用轻松推入云端。。。这么慢为什么还用?因为它对于像我们这种距离学会 Rails 还有 9XX 小时的人非常有用,让你不要钱玩部属(友情提示:人生中,不要钱的往往最贵)。呵呵!先去注册一个号吧,Heroku 注册按我按我按我
首先你需要安装 PostgreSQL,请看这篇文章:安装 PostgreSQL windows, ubuntu, Mac。然而开发与生产模式我们将使用同样的数据库 PostgreSQL,让我们改动 Gemfile
:
source 'https://rubygems.org'
gem 'rails', '3.2.3' gem 'pg', '0.12.2' gem 'bootstrap-sass', '2.0.0'
group :development, :test do gem 'rspec-rails', '2.9.0' end
# Gems used only for assets and not required # in production environments by default. group :assets do gem 'sass-rails', '3.2.4' gem 'coffee-rails', '3.2.2' gem 'uglifier', '1.2.3' end
gem 'jquery-rails', '2.0.0'
group :test do gem 'capybara', '1.1.2' end
rspec-rails
放在开发模式里,让我们可以存取 RSpec 的产生器、而同时在测试模式的群组里,让我们可以写测试。我们不需要像单独使用 RSpec 那样安装 RSpec Gem,因为已经含在 rspec-rails
的相依套件里了。测试模组里我们安装 capybara
,一个可以使用近似英语的语法模拟用户行为的套件。
还有我们需要设定 config/database.yml
其中 username 是你的用户名,比如我的用户名为 Mac,请看 Railscast 342 迁移至 PostgreSQL,拜托你先看这个视频,看看是如何设定的,视频约 8 分钟,才 8 分钟啊!不然你可能会遇到很多问题,当然你使用 SQLite3 也是可以的,只是前辈先烈都说,开发生产环境得用同样的数据库才是最佳实践,而我每天都穿不同内裤。
放心放心,配置不成功,尽管问吧,Ruby-china 的人都很愿意替你解答的,但记得提供足够多的信息,你不会这样问吧:
我试了一下 PostgreSQL,但是装不成功,有人知道怎么装吗?
这就像是说,
我跟谁谁谁交往了,但是失败了,有人知道怎么办吗?
你这样讲谁知道阿,细节阿细节,关键是细节,你得提供更多细节。。。
恩,回头看看 database.yml
怎么配置,你可以参考看看我的 database.yml
:
development: adapter: postgresql encoding: unicode database: x_weibo_dev pool: 5 username: Mac password:
test: adapter: postgresql encoding: unicode database: x_weibo_test pool: 5 username: Mac password:
production: adapter: postgresql encoding: unicode database: x_weibo pool: 5 username: Mac password:
改好 Gemfile 及配置数据库以后,让我们来
bundle install --binstubs --without production
一下,这会帮我们把所有描述在 Gemfile
里的 Gem 装好。而 --binstubs
选项是为了之后可以更方便的存取一些执行档。--without production
让我们在开发时不用产生生产模式的 Gem。
注意,第一次的 bundle
是会记忆你所输入的选项的,之后只要使用简单的 bundle
命令即可。
对了,你刚刚提到 --binstubs
更方便,究竟是怎样?好吧,既然你诚心诚意的发问了,那我就盛情难却的告诉你,一般调用 rake
命令是这样子吧:
bundle exec rspec
然而打了 --binstubs
它替我们把 rake
放到一个 bin 的目录,让我们可以这样子调用:bin/rspec
甚至是 rspec
,少打了几个字,程序员就是懒。
好了,运行完:
bundle install --binstubs --without production
过后,你会看到:
Your bundle is complete! Use bundle show [gemname]
to see where a bundled gem is installed.
耶!YEAH! 再来配置一下 Rails 让它使用 RSpec 来取代缺省的 Test::Unit:
rails generate rspec:install
OK,一切就是这么简单。Simple........
接下来让我们把项目文件放在 Github 做版本管理,首先你需要申请 一个 Github 帐户,并在计算机里安装 Git,请跟随此文步骤依序设置 Github,如果你对 Git 不熟悉,可以看看这篇Git 简易指南,你真的还不放心吗?好吧,那你可以去读读 Git 魔法或是 Pro Git 这两本免费的书,还都有中文版呢!
好了,有了 Git 与 Github 之后,让我们在改动一下 .gitignore
,这个文件可以把一些不必要的文件过滤掉,让它们不要上传至 Github。打开 .gitignore
添加:
.rbc *.sassc .sass-cache capybara-.html .rspec /.bundle /vendor/bundle /log/* /tmp/* /db/.sqlite3 /public/system/ /coverage/ /spec/tmp/* *.orig rerun.txt pickle-email-.html doc/ *.swp *~ .project .DS_Store bundler_stubs/
或是其他例如 重要报告(妈妈勿开)
, 高考模拟试题(重要勿看)
等等你不想让别人看到的目录。
呵呵,很好,你已经通过了学会 Rails 最难的一关,配置开发环境!!!!!!!!
然而我建议你把目录下的 README.rdoc 改成 README.md
mv README.rdoc README.md
README.md 可以放像是:
# 妈,我开始学 Rails 了! 努力学习 Rails 当中!!!
接下来让我们把这些文件托管到 Github 及 Heroku。
git init git add . git commit -m 'Init Commit'
去 Github 创一个新的 repo 哦 -> 或是直接按这里
git remote add origin [email protected]:/your-repo-name.git git push -u origin master
接下了是新增一个 heroku 域名(如果你还没设置好 Heroku,这里有步骤)
heroku create --stack cedar git push heroku master
之后如何推送、上传到 Github:
git push
之后如何推送、上传到 Heroku:
git push heroku
等等,说好的加速测试呢?Spork 跟 Guard 啊,可以参考这篇:Rails 3.2.3 使用 Spork + Guard + RSpec + Capybara
再附上一个如何配置 Windows/Linux/MacOS Sublime Text2 编辑器的文章,
这里有三部 Michael Hartl 教你如何配置环境的影片
等等,怎不用 VIM、Emacs 呢?恩,那些人自己就会用了,我是替初入门的你说的,亲。
光安装就讲了这么久,让我们实际开始创建静态页面吧!
Rails 火车要启动啦,
呜 -- 唉妈呀 -- 唉妈呀 -- 唉妈呀 --
这次的拟声词为何变成唉妈呀了呢?因为有一个山东大汉手指头被门夹住了。。。
上帝保佑他!
距离学会 Rails 还有 950 小时。。。
对了,我昨天捡到一张苍老师的笔墨一纸,分享之:
待续。。。
内容采于 Ruby on Rails Tutorial by Michael Hartl。此教程讲得钜细靡遗,小弟阅读学习时,同时记录学习心得、笔记,建议可直接学习该教程。
下一回:005 X 项目的静态页面