<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>liwei78 (李玮)</title>
    <link>https://ruby-china.org/liwei78</link>
    <description>写出正确的代码是需要理由的。</description>
    <language>en-us</language>
    <item>
      <title>CVE-2022-23633 解决版本已发布，建议升级。</title>
      <description>&lt;p&gt;上周末，Rails 发布了多个修订版本，以解决 CVE-2022-23633 带来的问题。该漏洞可能导致信息泄露的风险，CVSS 评分 7.4，建议尽早升级到 7.0.2.1, 6.1.4.5, 6.0.4.5, 5.2.6.1 版本。&lt;/p&gt;

&lt;p&gt;具体看这里。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://rubyonrails.org/2022/2/11/Rails-7-0-2-2-6-1-4-6-6-0-4-6-and-5-2-6-2-have-been-released" rel="nofollow" target="_blank"&gt;https://rubyonrails.org/2022/2/11/Rails-7-0-2-2-6-1-4-6-6-0-4-6-and-5-2-6-2-have-been-released&lt;/a&gt;
&lt;a href="https://discuss.rubyonrails.org/t/cve-2022-23633-possible-exposure-of-information-vulnerability-in-action-pack/80016" rel="nofollow" target="_blank"&gt;https://discuss.rubyonrails.org/t/cve-2022-23633-possible-exposure-of-information-vulnerability-in-action-pack/80016&lt;/a&gt;&lt;/p&gt;</description>
      <author>liwei78</author>
      <pubDate>Fri, 18 Feb 2022 22:45:12 +0800</pubDate>
      <link>https://ruby-china.org/topics/42149</link>
      <guid>https://ruby-china.org/topics/42149</guid>
    </item>
    <item>
      <title> [武汉] 云科安信武汉研发团队招聘 Ruby on Rails 工程师 [本期已结束]</title>
      <description>&lt;h2 id="更新"&gt;更新&lt;/h2&gt;
&lt;p&gt;感谢朋友们的关注，我们收到了多份简历，并且确认了最终人选。本期招聘结束了，后续有人才需求，还会发帖的。
再次感谢 ruby-china。&lt;/p&gt;
&lt;h2 id="我们是谁？"&gt;我们是谁？&lt;/h2&gt;
&lt;p&gt;北京云科安信科技有限公司成立于 2011 年，是一家专注于安全领域的技术公司，总部设立在北京，在武汉、上海、广州、深圳、长春分别设有分支机构。&lt;/p&gt;

&lt;p&gt;&lt;img src="http://www.antiratech.com/upload/20181228161810.jpg" title="" alt=""&gt;&lt;/p&gt;
&lt;h2 id="我们做什么的？"&gt;我们做什么的？&lt;/h2&gt;
&lt;p&gt;2014 年公司开始关注软件定义安全的理念，结合自身对安全领域的经验，学习并深入研究国外先进的防御思路，依托自主研发力量，最终结合“可编程、虚拟化、DOCKER”等技术实现了产品落地。公司秉承持续更新安全防御技术的宗旨，陆续形成了覆盖 L2-L7 层的可编程动态防御平台、针对撞库攻击和薅羊毛攻击等场景化的防御方案、基于 DOCKER 技术的远程浏览器隔离等一系列特色安全产品。&lt;/p&gt;

&lt;p&gt;在攻击场景和攻击技术日新月异的今天，无论是传统物理环境亦或是虚拟环境，无论是提供完整解决方案亦或是 SAAS 安全服务，云科安信为中国企业级客户持续输送最新的安全防御技术，助力中国客户轻松应对多变复杂的安全挑战。&lt;/p&gt;

&lt;p&gt;公司官网：&lt;a href="http://www.antiratech.com/" rel="nofollow" target="_blank"&gt;http://www.antiratech.com/&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="我们提供的待遇，福利，以及工作环境"&gt;我们提供的待遇，福利，以及工作环境&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;公司将按照武汉当地政策规定为您全额缴纳社会保险和公积金（如工资收入超过本市上一年职工月平均工资 300%，其缴费基数为社平工资的 300% 进行缴纳）。&lt;/li&gt;
&lt;li&gt;公司的员工福利计划&lt;/li&gt;
&lt;li&gt;每月用餐补贴 330 元；&lt;/li&gt;
&lt;li&gt;若自备办公电脑，则每月发放 100 元设备补贴。&lt;/li&gt;
&lt;li&gt;老员工还可以享受租房补贴。&lt;/li&gt;
&lt;li&gt;年假制度。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="招聘要求"&gt;招聘要求&lt;/h2&gt;
&lt;p&gt;职位描述：使用 Ruby on Rails 开发 WEB 应用及前端 API 服务。&lt;/p&gt;

&lt;p&gt;任职要求：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;本科以上学历，计算机相关专业优先，三年以上 Web 系统开发维护经验；&lt;/li&gt;
&lt;li&gt;熟悉 Ruby 语言，Ruby on Rails 框架；&lt;/li&gt;
&lt;li&gt;熟悉 HTML，CSS 等相关技术；&lt;/li&gt;
&lt;li&gt;熟悉 MySQL，Redis，Nginx，Git；&lt;/li&gt;
&lt;li&gt;熟悉 HTTP 协议、RESTful API 设计；&lt;/li&gt;
&lt;li&gt;熟悉常见的安全问题、缓存问题、性能问题及优化手段；&lt;/li&gt;
&lt;li&gt;熟悉 Linux 系统操作；&lt;/li&gt;
&lt;li&gt;能够编写高质量的代码，掌握常见代码重构技巧；&lt;/li&gt;
&lt;li&gt;掌握常见面向对象知识和设计模式；&lt;/li&gt;
&lt;li&gt;能基本无障碍的阅读英语文档；&lt;/li&gt;
&lt;li&gt;良好的沟通能力，独立分析解决问题能力。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="工作地点"&gt;工作地点&lt;/h2&gt;
&lt;p&gt;武汉东湖新技术开发区光谷大道&lt;/p&gt;
&lt;h2 id="联系方式"&gt;联系方式&lt;/h2&gt;
&lt;p&gt;简历发送到：[已隐藏]&lt;/p&gt;</description>
      <author>liwei78</author>
      <pubDate>Wed, 08 May 2019 19:39:44 +0800</pubDate>
      <link>https://ruby-china.org/topics/38495</link>
      <guid>https://ruby-china.org/topics/38495</guid>
    </item>
    <item>
      <title>[远程] 网络安全项目招聘 Ruby 全职工程师『本期已结束』</title>
      <description>&lt;p&gt;2017 年 2 月 18 日更新：感谢朋友们的关注和简历，本次招聘已经结束，欢迎新朋友加入团队。我们的团队在成长中，其他未来有更多朋友加入我们团队。&lt;/p&gt;
&lt;h2 id="招聘要求"&gt;招聘要求&lt;/h2&gt;&lt;h3 id="Ruby 全职工程师，一人"&gt;Ruby 全职工程师，一人&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;能独立完成产品功能开发&lt;/li&gt;
&lt;li&gt;有丰富的 Ruby 及 Rails 开发经验&lt;/li&gt;
&lt;li&gt;熟悉 MySQL&lt;/li&gt;
&lt;li&gt;熟悉前端开发&lt;/li&gt;
&lt;li&gt;熟悉 Linux 环境、部署相关内容&lt;/li&gt;
&lt;li&gt;有较好的英文阅读能力，因为我们的文档都是英文的&lt;/li&gt;
&lt;li&gt;有较好的自学能力，因为我们经常需要根据文档学习&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="待遇"&gt;待遇&lt;/h2&gt;
&lt;p&gt;Ruby 全职工程师：每天 6 小时固定工作时间，一周 30 小时，月 120 小时，12000 元/月。工作满 10 个月，15000 元/月&lt;/p&gt;

&lt;p&gt;Ruby 兼职工程师：每天 3 小时固定工作时间，一周 15 小时，月 60 小时，6000 元/月&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;全职每天弹性工作时间 2 小时，累计超出 8 小时部分按照加班计算，加班 100 元/小时&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;优先考虑全职人选，或可从兼职转为全职者。&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="福利"&gt;福利&lt;/h2&gt;
&lt;p&gt;兼职福利：可申请 32G 内存&lt;/p&gt;

&lt;p&gt;全职福利：报销一台工作测试机费用，32G/1T，预算 5000。&lt;/p&gt;
&lt;h2 id="项目概述"&gt;项目概述&lt;/h2&gt;
&lt;p&gt;项目为网络安全管理工具，核心功能已经开发完成，目前为客户提供测试，并进行定制开发。项目核心功能全部使用 Ruby 开发，客户端为 Rails 制作的管理界面。&lt;/p&gt;

&lt;p&gt;由于产品特殊性，不公开公司名称。&lt;/p&gt;
&lt;h2 id="工作内容"&gt;工作内容&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;客户端维护&lt;/li&gt;
&lt;li&gt;客户端功能测试&lt;/li&gt;
&lt;li&gt;核心功能开发及维护（需全职）&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="工作环境要求"&gt;工作环境要求&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;有独立的工作空间，不受外界干扰&lt;/li&gt;
&lt;li&gt;家庭及个人生活稳定&lt;/li&gt;
&lt;li&gt;网络通畅&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="试用期"&gt;试用期&lt;/h2&gt;
&lt;p&gt;一个月&lt;/p&gt;

&lt;p&gt;全职/兼职均有一个月试用期，试用期计算入职时间，这里不是考虑工作能力，而是考虑项目的复杂度和难度，不一定适合每个人，所以设置试用期，避免入职后遇到瓶颈无法克服。&lt;/p&gt;
&lt;h2 id="招聘时间"&gt;招聘时间&lt;/h2&gt;
&lt;p&gt;2017 年 2 月 18、19 日网络面试，2 月 20 日可正式开始工作。&lt;/p&gt;

&lt;p&gt;招聘可持续到 2 月底。&lt;/p&gt;
&lt;h2 id="简历投递"&gt;简历投递&lt;/h2&gt;
&lt;p&gt;邮件发送到：hi@liwei.me&lt;/p&gt;
&lt;h2 id="个人补充"&gt;个人补充&lt;/h2&gt;
&lt;p&gt;我是李玮，该项目我是在 2016 年 1 月开始接手的，从无到有，从简单到复杂，一步步的规划设计核心功能和客户端功能。今年，核心功能会以多个细分产品，投入商用。我们是一个严谨的，严格的团队，我们的工程师有多年的网络安全经验，我非常期待有能力的朋友加入我们团队。这个招聘，旨在挖掘一位核心成员加入团队。&lt;/p&gt;

&lt;p&gt;优先考虑熟人推荐。&lt;/p&gt;

&lt;p&gt;虽然这是一份看似诱人的『远程』工作，可是我们一定要严肃的看待这份工作，这是一份责任很大的工作，产品也很复杂，客户也有很多定制需求，我们需要的，是对自己精益求精的『态度』，和对产品负责的『心态』。&lt;/p&gt;

&lt;p&gt;至于办公室，想工作的时候哪里都是办公室，这份『远程』工作可能会蚕食你的生活，我们需要在工作压力和轻松生活间找到平衡。所以我想找到一位心智成熟，生活稳定的伙伴，加入到我们团队。&lt;/p&gt;

&lt;p&gt;2017 年 2 月 17 日发于 ruby-china.org&lt;/p&gt;</description>
      <author>liwei78</author>
      <pubDate>Fri, 17 Feb 2017 13:45:09 +0800</pubDate>
      <link>https://ruby-china.org/topics/32324</link>
      <guid>https://ruby-china.org/topics/32324</guid>
    </item>
    <item>
      <title>向社区的朋友推荐自己的书《Rails 实践》</title>
      <description>&lt;p&gt;推荐自己的书，实在诚惶诚恐。&lt;/p&gt;

&lt;p&gt;这是第一次写书，从 2 月 11 日到 6 月 29 日，总共用了四个半月的时间。书中的内容是按照自己的想法组织的，每个章节的内容来自对 Rails 手册的理解，api 的阅读体会，以及开发中的一点点心得。这本书，我一直称它为经验的合订本，也是写给自己多年开发经验的总结。&lt;/p&gt;

&lt;p&gt;我的技术成长并非一帆风顺，在写这本书的时间里，我不断的回顾各种代码细节，也不断的补充知识内容。回头看来，这对我现在的项目开发很有益处。我想，一个人的技术成长有各自的方式，四个半月，可以做一个代码项目，也可以写出一本书来，从性格上，我更适合后者。&lt;/p&gt;

&lt;p&gt;Ruby China 社区是国内最好的 Ruby 开发社区，这里有大量的经验分享，也有一群热心的人帮助解决开发中遇到的各种问题。能够从事 Rails 开发，并且身边有一个如此活跃、高质量的社区，实在是件幸运事。它对我的技术成长有着巨大的帮助，所以，这个社区会一直出现在书的感谢列表中。&lt;/p&gt;

&lt;p&gt;现在，我把这本书正式的介绍给社区的朋友们。之前在社区里回复别人帖子的时候，贴过书里的连接，那时候，我觉得书的内容还不是很充分，所以只在自己微信朋友圈分享过，但得到的反馈还是有限的，作为一个写作上的新手，还是很期望得到别人更多的反馈。所以这次正式贴出来，希望朋友们不吝赐教，督促我改进和提高书中内容。&lt;/p&gt;

&lt;p&gt;再次，感谢社区的朋友们。&lt;/p&gt;

&lt;p&gt;阅读地址：&lt;a href="http://rails-practice.com/content/" rel="nofollow" target="_blank" title=""&gt;http://rails-practice.com/content/&lt;/a&gt;&lt;/p&gt;</description>
      <author>liwei78</author>
      <pubDate>Tue, 08 Sep 2015 02:07:12 +0800</pubDate>
      <link>https://ruby-china.org/topics/27231</link>
      <guid>https://ruby-china.org/topics/27231</guid>
    </item>
    <item>
      <title>[已解决] config.force_ssl = false 后，post 动作还是会跳转到 https</title>
      <description>&lt;p&gt;在调试 ruby-china 代码的时候，production 中，已经设置了 &lt;code&gt;config.force_ssl = false&lt;/code&gt;，GET 动作正常，但是 POST 动作还是会跳转到 https，请问这是什么原因？&lt;/p&gt;

&lt;p&gt;这里可以测试到，发帖和修改帖子的时候，会出现这个问题。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://ruby.liwei.me/topics" rel="nofollow" target="_blank"&gt;http://ruby.liwei.me/topics&lt;/a&gt;&lt;/p&gt;</description>
      <author>liwei78</author>
      <pubDate>Tue, 21 Apr 2015 23:42:41 +0800</pubDate>
      <link>https://ruby-china.org/topics/25240</link>
      <guid>https://ruby-china.org/topics/25240</guid>
    </item>
    <item>
      <title>国内有类似 airbrake 的网站么？</title>
      <description>&lt;p&gt;rt&lt;/p&gt;</description>
      <author>liwei78</author>
      <pubDate>Mon, 15 Dec 2014 12:43:13 +0800</pubDate>
      <link>https://ruby-china.org/topics/23203</link>
      <guid>https://ruby-china.org/topics/23203</guid>
    </item>
    <item>
      <title>明年在成都举行，吃！吃！吃！</title>
      <description>&lt;p&gt;实在太高兴了，晚饭赶紧买了份麻辣干锅解解馋。不上图了，期待明年 rubyconf。&lt;/p&gt;

&lt;p&gt;===== updated at 2015-6-19 =======&lt;/p&gt;

&lt;p&gt;今天 rubyconf 暂定深圳，九月最后一个周末。&lt;/p&gt;</description>
      <author>liwei78</author>
      <pubDate>Sat, 01 Nov 2014 22:07:08 +0800</pubDate>
      <link>https://ruby-china.org/topics/22403</link>
      <guid>https://ruby-china.org/topics/22403</guid>
    </item>
    <item>
      <title>友好速搭这个卡片是做什么的？</title>
      <description>&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2014/330c727e50e229aafd5b98cdefb2332b.jpg" title="" alt=""&gt;&lt;/p&gt;</description>
      <author>liwei78</author>
      <pubDate>Sat, 01 Nov 2014 10:31:00 +0800</pubDate>
      <link>https://ruby-china.org/topics/22395</link>
      <guid>https://ruby-china.org/topics/22395</guid>
    </item>
    <item>
      <title>关于代码管理的困惑，求指点。</title>
      <description>&lt;p&gt;情景：&lt;/p&gt;

&lt;p&gt;我们的代码叫 CODE，它在 master 上。我们现在有了 A，B，C 三个客户，我们在这个 CODE 上提供功能。&lt;/p&gt;

&lt;p&gt;现在，我们为 A，B，C 分别提供了 b_branch，和 c_branch，A 继续使用 master。&lt;/p&gt;

&lt;p&gt;我开发了一个功能，从 master branch 出 feature_1，完成后 PR 回 master。一切正常。&lt;/p&gt;

&lt;p&gt;但是，B 和 C 也要用这个功能，B 和 C 的代码早就在自己的分支上走的很远了，feature_1 PR 到 b_branch 有大量的冲突。c_branch 也是一样。&lt;/p&gt;

&lt;p&gt;我的问题是：从一开始，我该如何管理这种情况下的开发呢？？我这里不是讨论 git 如何操作，而是想求教，在我们的软件开发中，面对此种局面，如何在开始的时候做好准备。&lt;/p&gt;

&lt;p&gt;简单的讲，我们有一套代码，应对各种需求，该如何管理我们的代码？&lt;/p&gt;

&lt;p&gt;补：
更形象的讲：A 说，我们在 M 功能上加审核（master），B 说，我们在 M 功能上加字段，但是不要审核，C 说，我们又要审核又要字段。&lt;/p&gt;</description>
      <author>liwei78</author>
      <pubDate>Sat, 31 May 2014 00:31:19 +0800</pubDate>
      <link>https://ruby-china.org/topics/19658</link>
      <guid>https://ruby-china.org/topics/19658</guid>
    </item>
    <item>
      <title>你为什么辞职？来自百度、阿里、豆瓣的回答。</title>
      <description>&lt;p&gt;&lt;a href="http://www.zhihu.com/question/22038145?utm_source=weekly-digest&amp;amp;utm_medium=email&amp;amp;utm_campaign=weekly107" rel="nofollow" target="_blank"&gt;http://www.zhihu.com/question/22038145?utm_source=weekly-digest&amp;amp;utm_medium=email&amp;amp;utm_campaign=weekly107&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.zhihu.com/question/22029522?utm_source=weekly-digest&amp;amp;utm_medium=email&amp;amp;utm_campaign=weekly107" rel="nofollow" target="_blank"&gt;http://www.zhihu.com/question/22029522?utm_source=weekly-digest&amp;amp;utm_medium=email&amp;amp;utm_campaign=weekly107&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.zhihu.com/question/22032540?utm_source=weekly-digest&amp;amp;utm_medium=email&amp;amp;utm_campaign=weekly107" rel="nofollow" target="_blank"&gt;http://www.zhihu.com/question/22032540?utm_source=weekly-digest&amp;amp;utm_medium=email&amp;amp;utm_campaign=weekly107&lt;/a&gt;&lt;/p&gt;</description>
      <author>liwei78</author>
      <pubDate>Thu, 21 Nov 2013 10:06:19 +0800</pubDate>
      <link>https://ruby-china.org/topics/15694</link>
      <guid>https://ruby-china.org/topics/15694</guid>
    </item>
    <item>
      <title>1111 了，你的购物车里放了哪本书？</title>
      <description>&lt;p&gt;《Ruby 元编程》，理由：pdf 快读完了，很喜欢，就买一本吧。
《高效程序员的 45 个习惯：敏捷开发修炼之道》，理由：最近对敏捷开发很关注，会再增加 1 本敏捷的书。&lt;/p&gt;</description>
      <author>liwei78</author>
      <pubDate>Thu, 07 Nov 2013 00:24:46 +0800</pubDate>
      <link>https://ruby-china.org/topics/15358</link>
      <guid>https://ruby-china.org/topics/15358</guid>
    </item>
    <item>
      <title>Rails Routes 中的两件事</title>
      <description>&lt;p&gt;写在前面：在看 devise 的源码过程中，发现 Devise 在做 Routes Mapping 时，使用了 Rails 自己的&lt;a href="/constraints" class="user-mention" title="@constraints"&gt;&lt;i&gt;@&lt;/i&gt;constraints&lt;/a&gt;。于是查查文档，笔记两件事。&lt;/p&gt;

&lt;p&gt;以下内容粗略翻译自 Ruby on Rails 4.0.1，ActionDispatch::Routing::Mapper::Scoping。&lt;/p&gt;

&lt;p&gt;位置：actionpack/lib/action_dispatch/routing/mapper.rb&lt;/p&gt;
&lt;h2 id="第一件事，通过routes访问资源。"&gt;第一件事，通过 routes 访问资源。&lt;/h2&gt;
&lt;p&gt;这种写法很熟悉的。&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;namespace&lt;/span&gt; &lt;span class="s2"&gt;"admin"&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="n"&gt;resources&lt;/span&gt; &lt;span class="ss"&gt;:posts&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:comments&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;那么，访问&lt;code&gt;/posts&lt;/code&gt;，调用 &lt;code&gt;Admin::PostsController&lt;/code&gt; 时，如何写呢？&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;scope&lt;/span&gt; &lt;span class="ss"&gt;module: &lt;/span&gt;&lt;span class="s2"&gt;"admin"&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="n"&gt;resources&lt;/span&gt; &lt;span class="ss"&gt;:posts&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;或者&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;resources&lt;/span&gt; &lt;span class="ss"&gt;:posts&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;module: &lt;/span&gt;&lt;span class="s2"&gt;"admin"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;当然，反过来，访问 &lt;code&gt;/admin/posts&lt;/code&gt; 时，调用 &lt;code&gt;PostsController&lt;/code&gt;，就这么写：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;scope&lt;/span&gt; &lt;span class="s2"&gt;"/admin"&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="n"&gt;resources&lt;/span&gt; &lt;span class="ss"&gt;:posts&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;或者&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;resources&lt;/span&gt; &lt;span class="ss"&gt;:posts&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;path: &lt;/span&gt;&lt;span class="s2"&gt;"/admin/posts"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="第二件事，限制访问。"&gt;第二件事，限制访问。&lt;/h2&gt;
&lt;p&gt;比如允许 &lt;code&gt;/posts/1.1&lt;/code&gt; 访问，而禁止 &lt;code&gt;/posts/1&lt;/code&gt;，那么代码如下：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;constraints&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;id: &lt;/span&gt;&lt;span class="sr"&gt;/\d+\.\d+/&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="n"&gt;resources&lt;/span&gt; &lt;span class="ss"&gt;:posts&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;在其他的资源引用上，也可以做如下限制：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;resources&lt;/span&gt; &lt;span class="ss"&gt;:posts&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="n"&gt;constraints&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;post_id: &lt;/span&gt;&lt;span class="sr"&gt;/\d+\.\d+/&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
    &lt;span class="n"&gt;resources&lt;/span&gt; &lt;span class="ss"&gt;:comments&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;限制 ip 访问，比如 只允许 192.168.* 访问资源：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;constraints&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;ip: &lt;/span&gt;&lt;span class="sr"&gt;/192\.168\.\d+\.\d+/&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="n"&gt;resources&lt;/span&gt; &lt;span class="ss"&gt;:posts&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;动态请求时的匹配，比如下面的这个限制：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;constraints&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;lambda&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;env&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"HTTP_USER_AGENT"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=~&lt;/span&gt; &lt;span class="sr"&gt;/iPhone/&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="n"&gt;resources&lt;/span&gt; &lt;span class="ss"&gt;:iphones&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;当然你也可以把它放到 model 里：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Iphone&lt;/span&gt;
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nc"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;matches?&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;env&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"HTTP_USER_AGENT"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=~&lt;/span&gt; &lt;span class="sr"&gt;/iPhone/&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;下面这句话有待验证，暂时不译：&lt;/p&gt;

&lt;p&gt;An expected place for this code would be lib/constraints.&lt;/p&gt;

&lt;p&gt;This class is then used like this:&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;constraints&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;Iphone&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="n"&gt;resources&lt;/span&gt; &lt;span class="ss"&gt;:iphones&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;好了，笔记结束，也结束一天的事情，今天的小聚会很开心，聊了很多。&lt;/p&gt;

&lt;p&gt;里克，2013 年 11 月 3 日，晚。&lt;/p&gt;

&lt;p&gt;推荐阅读：&lt;a href="https://github.com/hassox/warden/wiki/Examples" rel="nofollow" target="_blank"&gt;https://github.com/hassox/warden/wiki/Examples&lt;/a&gt;&lt;/p&gt;</description>
      <author>liwei78</author>
      <pubDate>Sun, 03 Nov 2013 23:27:17 +0800</pubDate>
      <link>https://ruby-china.org/topics/15270</link>
      <guid>https://ruby-china.org/topics/15270</guid>
    </item>
    <item>
      <title>同样是 markdown 的解释器，看完想起 lilu 的演讲。。。</title>
      <description>&lt;p&gt;&lt;a href="http://kramdown.rubyforge.org/" rel="nofollow" target="_blank"&gt;http://kramdown.rubyforge.org/&lt;/a&gt;
&lt;a href="http://maruku.rubyforge.org/" rel="nofollow" target="_blank"&gt;http://maruku.rubyforge.org/&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="爱森思坦说过：画面将我们引向感情,又将感情引向思想......"&gt;爱森思坦说过：画面将我们引向感情，又将感情引向思想......&lt;/h2&gt;
&lt;p&gt;&lt;img src="//l.ruby-china.com/photo/32bdb98043561c40844ce5b828c1033d.png" title="" alt=""&gt;&lt;/p&gt;</description>
      <author>liwei78</author>
      <pubDate>Fri, 01 Nov 2013 23:37:12 +0800</pubDate>
      <link>https://ruby-china.org/topics/15234</link>
      <guid>https://ruby-china.org/topics/15234</guid>
    </item>
    <item>
      <title>[长春] 11 月 3 日，长春的坛友们来个聚会吧。</title>
      <description>&lt;p&gt;地点：桂林路银杏树咖啡。里面有个包间，够 5 人左右聊天又不影响别人的。
时间：下午 1 点到 4 点。
话题：大家讲讲各自的开发经验。
联系：李玮，&lt;code&gt;186&lt;/code&gt; 咳咳 &lt;code&gt;八六六八&lt;/code&gt; 呵呵 &lt;code&gt;六三九二&lt;/code&gt;
费用：免费&lt;/p&gt;

&lt;p&gt;在前台说找李玮就可以，找不到前台的人，问门口的猫，或许也可以~~~&lt;/p&gt;

&lt;p&gt;具体位置：&lt;a href="http://j.map.baidu.com/OJ2Do" rel="nofollow" target="_blank"&gt;http://j.map.baidu.com/OJ2Do&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="//l.ruby-china.com/photo/a20416e02ca3a6135defb651e09dce73.png" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;另：本次活动是免费的，如果大家觉得可以经常进行聚会，我们就公开接受活动资金捐赠，数额不限。承诺：捐赠人及金额使用会发布在 ruby-china 上，接受大家监督。&lt;/p&gt;</description>
      <author>liwei78</author>
      <pubDate>Fri, 01 Nov 2013 15:36:14 +0800</pubDate>
      <link>https://ruby-china.org/topics/15220</link>
      <guid>https://ruby-china.org/topics/15220</guid>
    </item>
    <item>
      <title>结束了，感受嘛？</title>
      <description>&lt;p&gt;就是：再也不相信你们的头像啦。&lt;/p&gt;</description>
      <author>liwei78</author>
      <pubDate>Mon, 28 Oct 2013 00:03:37 +0800</pubDate>
      <link>https://ruby-china.org/topics/15075</link>
      <guid>https://ruby-china.org/topics/15075</guid>
    </item>
    <item>
      <title>Rack, 我忽视你了 [已更新]</title>
      <description>&lt;p&gt;写在前面：
RubyConfChina 结束了，感觉组织者的辛苦付出。期待明年带给我们更多的启示。另：让我们买本英语 500 句，每天学一点吧。&lt;/p&gt;
&lt;h2 id="什么是Rack"&gt;什么是 Rack&lt;/h2&gt;
&lt;p&gt;Rack provides a minimal, modular and adaptable interface for developing web applications in Ruby. By wrapping HTTP requests and responses in the simplest way possible, it unifies and distills the API for web servers, web frameworks, and software in between (the so-called middleware) into a single method call.&lt;/p&gt;

&lt;p&gt;大意：Rack 是个 api，这个 api 会调用一个方法，它是 call()。&lt;/p&gt;
&lt;h2 id="什么是Rack Application？"&gt;什么是 Rack Application？&lt;/h2&gt;
&lt;p&gt;A Rack application is an Ruby object (not a class) that responds to call. It takes exactly one argument, the environment and returns an Array of exactly three values: The status, the headers, and the body.&lt;/p&gt;

&lt;p&gt;大意：Rack App 需要提供一个方法，它就是 call()。&lt;/p&gt;
&lt;h2 id="一个误解：Rack是web server吗？"&gt;一个误解：Rack 是 web server 吗？&lt;/h2&gt;
&lt;p&gt;答：它不是。&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;一个浏览器请求&lt;/li&gt;
&lt;li&gt;web server 将请求交给了 Rack&lt;/li&gt;
&lt;li&gt;Rack 告诉了 app&lt;/li&gt;
&lt;li&gt;app 想了想，告诉 Rack 我的返回结果是什么&lt;/li&gt;
&lt;li&gt;Rack 告诉 web server 它要的结果&lt;/li&gt;
&lt;li&gt;web server 告诉浏览器一个可解析的结果&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="Rack为我做了什么？让Sprockets代表大伙发个言。"&gt;Rack 为我做了什么？让 Sprockets 代表大伙发个言。&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://github.com/sstephenson/sprockets" rel="nofollow" target="_blank" title=""&gt;看看 Sprockets&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;之前我对 Sprockets 的概念完全被 Rails 给代替了，那么注意下面标注的文字，原来只是 Rails 替我做了额外的事情，我没有察觉。&lt;/p&gt;

&lt;p&gt;You'll need an instance of the Sprockets::Environment class to access and serve assets from your application. Under Rails 3.1 and later, &lt;code&gt;YourApp::Application.assets is a preconfigured Sprockets::Environment instance&lt;/code&gt;. For Rack-based applications, create an instance in config.ru.&lt;/p&gt;

&lt;p&gt;那么，我如果自己单独使用 Sprockets 呢？&lt;/p&gt;

&lt;p&gt;If you are using Sprockets with a Rack application, you will need to mount the environment yourself. A good way to do this is with the map method in config.ru:&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'sprockets'&lt;/span&gt;
&lt;span class="n"&gt;map&lt;/span&gt; &lt;span class="s1"&gt;'/assets'&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="n"&gt;environment&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Sprockets&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Environment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;
  &lt;span class="n"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append_path&lt;/span&gt; &lt;span class="s1"&gt;'app/assets/javascripts'&lt;/span&gt;
  &lt;span class="n"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append_path&lt;/span&gt; &lt;span class="s1"&gt;'app/assets/stylesheets'&lt;/span&gt;
  &lt;span class="n"&gt;run&lt;/span&gt; &lt;span class="n"&gt;environment&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="n"&gt;map&lt;/span&gt; &lt;span class="s1"&gt;'/'&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="n"&gt;run&lt;/span&gt; &lt;span class="no"&gt;YourRackApp&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Sprockets 可以支持 SCSS/SASS，LESS，CoffeeScript，甚至.scss.erb。&lt;/p&gt;
&lt;h2 id="我能用Rack做什么？"&gt;我能用 Rack 做什么？&lt;/h2&gt;
&lt;p&gt;注意那个不起眼的 config.ru，我可以用它来写一个自己的 Ruby 框架。当然啦，这个框架现在什么也不做。&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;# config.ru&lt;/span&gt;
&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;File&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;expand_path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'../my_app.rb'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="kp"&gt;__FILE__&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 这句话copy自Rails，吼吼&lt;/span&gt;
&lt;span class="n"&gt;run&lt;/span&gt; &lt;span class="no"&gt;MyApp&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Application&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;# my_app.rb&lt;/span&gt;
&lt;span class="k"&gt;module&lt;/span&gt; &lt;span class="nn"&gt;MyApp&lt;/span&gt;
  &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Application&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nc"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;env&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"Content-Type"&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"text/html"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;h1&amp;gt;It's My App&amp;lt;/h1&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'&amp;lt;p&amp;gt;Yeah!!!&amp;lt;/p&amp;gt;'&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;rackup -s WEBrick -p 1212&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;如果你看过&lt;a href="https://github.com/JuanitoFatas/Guides/blob/master/guides/edge-translation/rails-on-rack-zh_CN.md" rel="nofollow" target="_blank" title=""&gt;这篇文章&lt;/a&gt;，那么你会发现，我们熟知的 Rails 启动方式，还可以这样完成：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Rails.root/config.ru&lt;/span&gt;
&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;File&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;expand_path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'../config/environment'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kp"&gt;__FILE__&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;use&lt;/span&gt; &lt;span class="no"&gt;Rack&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Debugger&lt;/span&gt;
&lt;span class="n"&gt;use&lt;/span&gt; &lt;span class="no"&gt;Rack&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;ContentLength&lt;/span&gt;
&lt;span class="n"&gt;run&lt;/span&gt; &lt;span class="no"&gt;Rails&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;application&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;写这篇文章的缘由，是在开发一个功能时，想到它可以包装成一个 gem，而后有看了&lt;a href="http://guides.rubyonrails.org/v3.2.13/engines.html" rel="nofollow" target="_blank" title=""&gt;Rails Guides: Getting Started with Engines&lt;/a&gt;，&lt;a href="http://guides.ruby-china.org/engines.html" rel="nofollow" target="_blank" title=""&gt;中文在这里&lt;/a&gt;，这之后有了对 Rails 进行解构的想法，而后，便是更加清楚的意识到 Rack 的存在了。&lt;/p&gt;

&lt;p&gt;那么，sinatra，和其他同类型的 Rack-based app（非 Rails），都是我们可以尝试的选择。&lt;/p&gt;
&lt;h2 id="继续对Rails解构，我们还会发现什么？"&gt;继续对 Rails 解构，我们还会发现什么？&lt;/h2&gt;
&lt;p&gt;当我们&lt;code&gt;rake middleware&lt;/code&gt;的时候，我们可以看到 Rails 加载了哪些 middleware，这些不是写在 Gemfile 里的，但是他们可以来自 gem。这就有点奇怪的感觉了，不是么？&lt;/p&gt;

&lt;p&gt;如果我们选择 sinatra，选择一些自己要使用的 gem，再挑选一些 middleware，我们就可以搭建一个 app 了。比如，一个管理 jekyll 的 app blog。&lt;/p&gt;
&lt;h2 id="写在后面"&gt;写在后面&lt;/h2&gt;
&lt;p&gt;这篇短文的意图，是想通过 Rails 的解构，对 Rack 和其他 Rack-based App 有一个清楚的了解，当我们选择功能方案的时候，会从另外一些角度，选择我们合适的实现途径。Rails 给我们的贡献，就像 Prem 在 RubyConf 上讲到的，我们可以看看，把 Rails 的哪些东西可以放到我们的项目里。&lt;/p&gt;

&lt;p&gt;这篇博文是两次完成的，因为期间要参加 RubyConfChina，所以在之前把半成品放了出去，听听大家的意见。回来后发现了一些新的资源，一并补充进来。再次感谢提出意见的 ruby-china.org 的小伙伴们。&lt;/p&gt;
&lt;h2 id="参考资料"&gt;参考资料&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://guides.rubyonrails.org/v3.2.13/rails_on_rack.html" rel="nofollow" target="_blank" title=""&gt;http://guides.rubyonrails.org/v3.2.13/rails_on_rack.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://m.onkey.org/ruby-on-rack-1-hello-rack" rel="nofollow" target="_blank" title=""&gt;Ruby on Rack #1 - Hello Rack!&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://m.onkey.org/ruby-on-rack-2-the-builder" rel="nofollow" target="_blank" title=""&gt;Ruby on Rack #2 - The Builder&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://m.onkey.org/2008/11/10/rails-meets-sinatra" rel="nofollow" target="_blank" title=""&gt;Rails meets Sinatra&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://m.onkey.org/rails-meets-sinatra-2-mix-n-match" rel="nofollow" target="_blank" title=""&gt;Rails meets Sinatra #2 - Mix n' Match&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://gauravchande.com/post/58760237018/what-is-rack-in-ruby-rails" rel="nofollow" target="_blank" title=""&gt;What is ‘Rack’ in Ruby/Rails?&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://rack.rubyforge.org/doc/" rel="nofollow" target="_blank" title=""&gt;Rack Doc&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.sinatrarb.com/" rel="nofollow" target="_blank" title=""&gt;sinatra&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/JuanitoFatas/Guides/blob/master/guides/edge-translation/rails-on-rack-zh_CN.md" rel="nofollow" target="_blank" title=""&gt;Rails on Rack&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://railser.cn/blog/rails-and-merb/" rel="nofollow" target="_blank" title=""&gt;(转载)Rails 與 Merb 合併背後的故事&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;原文地址：&lt;a href="http://railser.cn/blog/rack-i-ignore-u/" rel="nofollow" target="_blank" title=""&gt;里克的自习室：Rack, 我忽视你了 &lt;/a&gt;&lt;/p&gt;</description>
      <author>liwei78</author>
      <pubDate>Fri, 25 Oct 2013 11:13:44 +0800</pubDate>
      <link>https://ruby-china.org/topics/15017</link>
      <guid>https://ruby-china.org/topics/15017</guid>
    </item>
    <item>
      <title>tolk，一个可在线管理 i18n 的工具</title>
      <description>&lt;p&gt;今天看 &lt;a href="http://m.onkey.org/" rel="nofollow" target="_blank"&gt;http://m.onkey.org/&lt;/a&gt; 博客是看了这个项目，之前它在 dhh 的 github 上，现在独立出来，版本为 1.3.11。&lt;/p&gt;

&lt;p&gt;地址：&lt;a href="https://github.com/tolk/tolk" rel="nofollow" target="_blank"&gt;https://github.com/tolk/tolk&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;特点：&lt;/p&gt;

&lt;p&gt;1、它可以通过 &lt;a href="http://localhost:3000/tolk/" rel="nofollow" target="_blank"&gt;http://localhost:3000/tolk/&lt;/a&gt; 来管理 i18n 的 yml 文件
2、它可以把 yml 写到数据库里
3、可以为访问 &lt;a href="http://localhost:3000/tolk/" rel="nofollow" target="_blank"&gt;http://localhost:3000/tolk/&lt;/a&gt; 的增加权限&lt;/p&gt;

&lt;p&gt;我还没有实际运行它，我在写别的东西，顺便看到它的。&lt;/p&gt;

&lt;p&gt;小伙伴们怎么看？？&lt;/p&gt;</description>
      <author>liwei78</author>
      <pubDate>Wed, 23 Oct 2013 23:43:44 +0800</pubDate>
      <link>https://ruby-china.org/topics/14977</link>
      <guid>https://ruby-china.org/topics/14977</guid>
    </item>
    <item>
      <title>OS X 更新问题</title>
      <description>&lt;p&gt;明天上午出门，我打算 air 开着更新系统。我不关盖子，app store 更新 OS X 时会自动关机么？？&lt;/p&gt;

&lt;p&gt;我觉得不会，但是没把握，求证下各位。&lt;/p&gt;</description>
      <author>liwei78</author>
      <pubDate>Wed, 23 Oct 2013 23:26:21 +0800</pubDate>
      <link>https://ruby-china.org/topics/14976</link>
      <guid>https://ruby-china.org/topics/14976</guid>
    </item>
    <item>
      <title>一大坨 static site generators。</title>
      <description>&lt;p&gt;最近大家都在用 Jekyll 和 middleman，很少提到 nanoc，今天也是第一次发现它，并且惊讶的发现了一大坨 static site generator。&lt;/p&gt;

&lt;p&gt;地址：&lt;a href="http://nanoc.ws/about/#similar-projects" rel="nofollow" target="_blank"&gt;http://nanoc.ws/about/#similar-projects&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;今天下午在看如何把 bootswatch-rails 的功能放到 jekyll 里，如何把 themeforest.net 的设计也方便的放进去。&lt;/p&gt;

&lt;p&gt;今天是开始玩 jekyll 的第三天。&lt;/p&gt;</description>
      <author>liwei78</author>
      <pubDate>Tue, 22 Oct 2013 17:14:24 +0800</pubDate>
      <link>https://ruby-china.org/topics/14944</link>
      <guid>https://ruby-china.org/topics/14944</guid>
    </item>
    <item>
      <title>小团队敏捷开发，大家怎么看？求真心话。</title>
      <description>&lt;p&gt;rt&lt;/p&gt;</description>
      <author>liwei78</author>
      <pubDate>Sun, 20 Oct 2013 13:23:01 +0800</pubDate>
      <link>https://ruby-china.org/topics/14878</link>
      <guid>https://ruby-china.org/topics/14878</guid>
    </item>
  </channel>
</rss>
