熟悉我的人应该知道我以前就写了一个论坛 http://codecampo.com/ ,它已经在线三年,是我维护最久的项目。这两个月我又将它推倒重写了一次,理由写在这里:关于 Campo 3。
项目地址是:https://github.com/chloerei/campo
然后是针对 Ruby China 社区补充点内容。
一直有人问有没有一个不太复杂又不太简单、代码风格好、没有奇技淫巧,适合新手阅读的 Rails 项目,那么我建议看看 Campo 3。我认为即使是同样的逻辑,代码也要写三遍才会算得上好,Campo 版本刚刚到达 3,所以我觉得可以给人看了。当然如果觉得代码有写得烂的地方,欢迎发 Pull Request,一起讨论怎样写代码更好。
这个项目的技术选型一个大前提是跟随 Basecamp 的方案,因为它代表了以后 Rails 发展的方向,也便于降低维护难度。所以跟我之前两个项目不同,这次用了 ActiveRecord 搭配 Postgresql 数据库,而不是 MongoDB。
Template 依然用的是我喜爱的 Slim。在项目初期我曾经想为了降低加入门槛用 html.erb,但在写了几个页面之后,我还是难以承受编写 HTML 标签的繁琐(试过 emmet),已经到了无法工作的程度,所以还是决定用 Slim。这可能是最不 Basecamp style 的地方,我希望用不惯的人也原谅我一点私心。
另外我花了很多时间去写开发环境搭建的脚本还有部署脚本,如果你熟悉 vagrant,那么在 clone 代码后可以用一条命令搭建开发环境:
vagrant up dev
然后 vagrant 会自动安装依赖、执行 bundle、创建数据库、初始化配置,安装的东西比较多,取决于网速可能会花很多时间,这时候可以泡杯茶看看书 。如果你不熟悉 vagrant,简单地说它是一个利用虚拟机搭建开发环境的工具,这样无论用什么 OS 都可以获得一样的开发环境。
最后想说 codecampo.com 的运营方向,我打算让它成为 Campo 项目的支持论坛,其他的帖子我还是发在 Ruby China,所以不会冲突,我一个人也无法运营一个社区。
希望这个项目能帮助一部分人节省时间,以上 :metal:
秀一下代码量,越少越好。
$ rake stats
+----------------------+-------+-------+---------+---------+-----+-------+
| Name | Lines | LOC | Classes | Methods | M/C | LOC/M |
+----------------------+-------+-------+---------+---------+-----+-------+
| Controllers | 713 | 585 | 28 | 104 | 3 | 3 |
| Helpers | 127 | 108 | 1 | 13 | 13 | 6 |
| Models | 305 | 247 | 8 | 31 | 3 | 5 |
| Mailers | 22 | 19 | 2 | 2 | 1 | 7 |
| Javascripts | 148 | 108 | 0 | 20 | 0 | 3 |
| Libraries | 0 | 0 | 0 | 0 | 0 | 0 |
| Controller tests | 749 | 607 | 25 | 12 | 0 | 48 |
| Helper tests | 52 | 43 | 8 | 0 | 0 | 0 |
| Model tests | 194 | 152 | 8 | 0 | 0 | 0 |
| Mailer tests | 11 | 5 | 2 | 0 | 0 | 0 |
| Integration tests | 0 | 0 | 0 | 0 | 0 | 0 |
+----------------------+-------+-------+---------+---------+-----+-------+
| Total | 2321 | 1874 | 82 | 182 | 2 | 8 |
+----------------------+-------+-------+---------+---------+-----+-------+
Code LOC: 1067 Test LOC: 807 Code to Test Ratio: 1:0.8
@Rei 赞 另外,有个疑惑,是出于什么考虑自己写了一个用户模块,而不是用 devise?用 devise 的话,其他应用集成或者做扩展会省力很多,而且代码量会少很多。
#18 楼 @quakewang devise 的源码我一直读不懂,对于用户模块这种定制需求比较多的功能读不懂源码让我觉得没有把握。
自己写用户登陆代码也不多,可以在项目里直接看到,要改起来很方便。
LOL... Campo 赶在 Discourse 前打到 v3 版本。。。
http://blog.discourse.org/2014/01/the-road-to-discourse-1-0-2/
#9 楼 @cassiuschen 貌似它俩确实是同一种技术的两种语法。下面是我做的笔记:
SCSS 语法是 CSS 的超集 (兼容所有的 css 代码), 是比较新的比较推荐的格式。SASS 语法是旧的格式,它采用了类似 python 的缩进语法 (那么跟 css 就不兼容了). 所以我要是学习的话就学 SCSS 语法就行了。 但是 SASS 不光是一种语法,它是这种技术的称呼。所以即使你用的是 SCSS 的语法,你实现出来的还是 SASS 这种东西。(听起来有点拗口,其实关键在于 SASS 不光是一种缩进语法,它也是这个技术的称呼)
@Rei 为什么不用 mongo,又转回 postgre 了? 关于 devise,devise 是基于 warden 的,要读懂 devise 之前先要读懂 warden,或者我什么时候写点文章好了。
尝试部署一下,出错了
Running ~/.rbenv/bin/rbenv exec bundle exec rake assets:precompile on xxx.xxx.xxx.xxx
Command: cd /var/www/campo/releases/20140312144829 && ( RBENV_ROOT=~/.rbenv RBENV_VERSION=2.0.0-p247 RAILS_ENV=production ~/.rbenv/bin/rbenv exec bundle exec rake assets:precompile
rake aborted!
DEBUG [dee9ec58] undefined method `[]' for false:FalseClass
DEBUG [dee9ec58] /var/www/campo/releases/20140312144829/config/initializers/00_config.rb:2:in `<top (required)>'
@Rei 有一些 gem 我没用过,所以用你的代码 new 了一个项目,试试这些 gem, 在 bootstrap 这个 gem,但是一直报错没变量
Undefined variable: "$gray-lighter".
我的 application.css.scss
/*
*= require font-awesome
*/
$font-size-base: 15px;
@import "bootstrap";
@import "campo";
body {
background: #eee;
}
.text-hide-overflow {
overflow: hidden;
text-overflow: ellipsis;
}
Gemfile
# Bootstrap
gem 'bootstrap-sass', '~> 3.1.1'
# Font Awesome
gem 'font-awesome-sass', '~> 4.0.2'
# Use SCSS for stylesheets
gem 'sass-rails', '~> 4.0.1'
#104 楼 @runup 没有太多程序文档,只有安装部署相关的文档 https://github.com/chloerei/campo/wiki
而且安装过程我正在简化成一个 shell 脚本,wiki 近期会过时。