Rails 1000 个小时学会 Rails - 004 神秘的 X 项目

juanito · May 12, 2012 · Last by juanito replied at June 07, 2016 · 10350 hits

1000 个小时学会 Rails 系列

上一回:003 RSpec 行为驱动测试简介

Mysterious X Project 神秘的 X 项目

话说有天在梦里我上了中国达人秀,

周立波:你叫什么名字? 我:我叫 XXX,来自台湾台北。 周立波:你从事什么职业? 我:我是一名业馀的小码农,从事网络开发。 周立波:哇,就是那种专门写代码的那种? 我:对对对,我会经常从我家到公司写代码,直接写到明晨清早。 周立波:一次是多少行代码? 我:一次是大概不到 4000 行代码。 周立波:是用 Ruby 还是 PHP? 我:PHP。 周立波:。。。。。。。。非常辛苦! 我:我每个月大概有二十二三天,都在公司写代码,特别的孤独。就是在我最孤独的时候,我就听著我喜欢听的音乐,每天每时每刻,都是这样度过的。 周立波:你觉得人在码途之中是种什么感情? 我:我就是感觉我,编著码的时候,我低头的时候,看到的是我的代码,我抬头的时候,看见的是我的梦想。 周立波:呦哦,哎唷,很有湿人情怀,他低头的时候是他的代码,抬头是你的梦想,那么来表演什么节目呢? 我:我…今天带来一首,我编程时经常唱的一首歌。苍井空老师的,第二梦。 周立波:。。。。。。。。。。。。。开始你的表演。 主持人:在四千多行的代码当中,会出现什么样的声音?来安慰他自己呢? 视频连结

然而,就在此时,

突然手机响了 (点按聆听)

手机铃声在不寻常的时间吵醒了我,半梦半醒中接起了这个就不该接的电话。。。


我:嗯,你谁阿? ?:腰饿三宁六 我:。。。谁? ?:腰 - 饿-参 - 宁-六 我:呃。。。不好意思这...能说国语吗? ?:先生您好,我们这里是铁道部。 我:(心想)擦,该不会上次去参加中国达人秀的时候,搭车逃票被抓了吧。。。 我:嗯,有什么事吗? 12306:先生您好,不知您有没有建置网站的意愿,有道是新浪微博、推特各种乱象,目前单位正秘密招人进行开发一个 新微博 。 我:呃。。。这敢情好阿。。。但怎么会找上我。。。我不懂 JSP 的阿! 12306:经过无数的会议及考量后,领导决定使用与铁道部其名相称的技术 Rails,来开发我们的新微博,我们是透过码农协会找到你的。 我:呃。。。码农协会? 12306:一个协会位于类似美国的五十一区,是一个神秘的特区。 我:哦。。。怎么会选上我? 12306:我们发现了您平常做的梦都是编程相关的,相信你是合适人选,稍后就会有有关人士带您到五十一区进行编码 我:汗。。。这我试试行吗?我貌似做不来。。。

突然间咻的一声,天降几个几个山东大汉,把我带走了,醒来时我已经不知身在何处了,这里貌似就是五十一区了。。。 在这里每天每时每刻都只能编程,不然就会有一堆一堆美女冲出来用XX撞你,或是逼迫你使用 JAVA / C++ 编程,太可怕了,我还是好好干吧!

这是我在五十一区的第一天,我要把我的工作,都记录下来。。。

呃,这是一个极富挑战性的项目,虽然我没有 2 年的 PHP 开发经验,也没有在毕业设计里搞过 JSP,而我的化繁为简能力也仅止于繁体转简体,我还是想要尝试这个巨大的挑战,虽亿万 HTTP Request,吾往矣。。。

神秘的 X 项目

创建项目

(懒得听我废话直接看这小节我输入了什么命令看 => 这里

这个神秘的 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 小时。。。

对了,我昨天捡到一张苍老师的笔墨一纸,分享之:

苍老师献给 Rails 学习童鞋

待续。。。

内容采于 Ruby on Rails Tutorial by Michael Hartl。此教程讲得钜细靡遗,小弟阅读学习时,同时记录学习心得、笔记,建议可直接学习该教程。

下一回:005 X 项目的静态页面

这是原创的嘛?太神奇了,太诡异了,手机铃声连接真重口味啊,让我出了一身冷汗~~~ 这贴子碉堡了~~~

#2 楼 @Juanito 笔记都能写成这样,楼主文风真洒脱啊~

#3 楼 @lgn21st 谢谢,有写错的地方还麻烦指点一下,到时候误人子弟就不好了!

楼主,一共大概有多少集呀?

#2 楼 @Juanito 哈,那个 tutorial 真是超详细啊。第一次看的时候写测试直接写崩溃了。

#5 楼 @Levan 再写个八篇左右。。。

酷毙啦!这样的教程太欢乐啦! 完全把学习变成了享受,楼主好样的!期待下文。

“经过无数的会议及考量后,领导决定使用与铁道部其名相称的技术 Rails”我彻底晕掉……,太欢乐了,哈哈哈!

#9 楼 @ericguo 这确实很符合中国国情。无数的会议和讨论,最终做出决定的是领导~ 选择的方法是好不好听~

文章最后,苍老师的字,是真的嘛?

#11 楼 @lgn21st 看字体风格,汉字应该是出自苍老师的手笔。“Rails”应该是自己加上的。 苍老师的毛笔字写的是不错。

非常不错 很开心的教程

看了楼主写的几篇牛文,特注册 ID 来赞,碉堡了。

还真要写 1000 篇文章啊。。。大牛啊

苍老师的墨宝....

听说爱情回来过,那男的唱的简直就是封神之作啊,听了 N 次了。

开头.......屌爆了.....连周立波会问什么都那么传神......

我就是感觉我,编著码的时候,我低头的时候,看到的是我的代码,我抬头的时候,看见的是我的梦想。 --这句话,赞啊,咔咔 LZ 应该是台湾的吧,偶是山东的,不过偶的舅老爷在台湾:)

酷毙了...

楼主太幽默了,笑死我了。文章写得很好,很有用,感谢!

#21 楼 @shangchen 就是不更新了,太可惜了 跪求楼主更新啊@Juanito

You need to Sign in before reply, if you don't have an account, please Sign up first.