<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>kevinzhow (kevinzhow)</title>
    <link>https://ruby-china.org/kevinzhow</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title> [北京] 多点科技 招聘 Ruby 工程师 3 名 15 - 40K</title>
      <description>&lt;h3 id="关于多点科技"&gt;关于多点科技&lt;/h3&gt;
&lt;p&gt;「北京多点科技股份有限公司」是一家新三板上市公司（股票代码 837762），旗下业务有移动营销平台「阿搜」 &lt;a href="http://asou.com" rel="nofollow" target="_blank" title=""&gt;asou.com&lt;/a&gt;，中文创作平台「字里行间」 &lt;a href="https://zi.com" rel="nofollow" target="_blank" title=""&gt;zi.com&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="基本要求"&gt;基本要求&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;计算机相关专业，本科以上学历，英语 CET-4 及以上水平&lt;/li&gt;
&lt;li&gt;有编写单元测试的习惯&lt;/li&gt;
&lt;li&gt;注重界面用户体验、交互设计、网站性能，有创新精神&lt;/li&gt;
&lt;li&gt;Rails 2 年以上开发经验&lt;/li&gt;
&lt;li&gt;熟悉 Linux 系统&lt;/li&gt;
&lt;li&gt;熟悉 RESTful API 设计和常用设计模式&lt;/li&gt;
&lt;li&gt;熟练 MySQL/Redis 使用设计，以及常用的 DAL/ORM 框架和设计模式&lt;/li&gt;
&lt;li&gt;具有面向对象分析、设计、开发能力，精通 OO，AOP 和 Design Pattern/Anti-Pattern&lt;/li&gt;
&lt;li&gt;良好的软件开发素养，能贯彻实施敏捷、测试驱动和持续集成的开发模式。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="我们可以给你什么？"&gt;我们可以给你什么？&lt;/h3&gt;
&lt;ul&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;li&gt;各种极客产品，例如 Vive，Hololens，划船机……&lt;/li&gt;
&lt;li&gt;每年免费参加技术大会&lt;/li&gt;
&lt;li&gt;股票 :)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="加分项"&gt;加分项&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;有开源作品的优先&lt;/li&gt;
&lt;li&gt;有技术博客的优先&lt;/li&gt;
&lt;li&gt;全栈&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="破例项"&gt;破例项&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;学习能力超强，那么不满足以上条件也可以&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="我们的工作方式？"&gt;我们的工作方式？&lt;/h3&gt;
&lt;p&gt;协作：G Suite，Trello，Github，Slack，Sketch&lt;/p&gt;

&lt;p&gt;哲学：自动化是立命之本&lt;/p&gt;
&lt;h3 id="联系方式"&gt;联系方式&lt;/h3&gt;
&lt;p&gt;邮箱：&lt;a href="mailto:kaiwen.zhou@duodian.com" title=""&gt;kaiwen.zhou@duodian.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;公司地址：北京朝阳路 85 号 铜牛电影产业园&lt;/p&gt;</description>
      <author>kevinzhow</author>
      <pubDate>Mon, 15 May 2017 11:36:07 +0800</pubDate>
      <link>https://ruby-china.org/topics/32992</link>
      <guid>https://ruby-china.org/topics/32992</guid>
    </item>
    <item>
      <title>[北京] 多点科技 招聘 Ruby 工程师 3 名 15 - 30K</title>
      <description>&lt;h3 id="关于多点科技"&gt;关于多点科技&lt;/h3&gt;
&lt;p&gt;「北京多点科技股份有限公司」是一家新三板上市公司（股票代码 837762），旗下业务有移动营销平台「阿搜」 &lt;a href="http://asou.com" rel="nofollow" target="_blank" title=""&gt;asou.com&lt;/a&gt;，中文创作平台「字里行间」 &lt;a href="https://zi.com" rel="nofollow" target="_blank" title=""&gt;zi.com&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="基本要求"&gt;基本要求&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;计算机相关专业，本科以上学历，英语 CET-4 及以上水平&lt;/li&gt;
&lt;li&gt;有编写单元测试的习惯&lt;/li&gt;
&lt;li&gt;注重界面用户体验、交互设计、网站性能，有创新精神&lt;/li&gt;
&lt;li&gt;Rails 2 年以上开发经验&lt;/li&gt;
&lt;li&gt;熟悉 Linux 系统&lt;/li&gt;
&lt;li&gt;熟悉 RESTful API 设计和常用设计模式&lt;/li&gt;
&lt;li&gt;熟练 MySQL/Redis 使用设计，以及常用的 DAL/ORM 框架和设计模式&lt;/li&gt;
&lt;li&gt;具有面向对象分析、设计、开发能力，精通 OO，AOP 和 Design Pattern/Anti-Pattern&lt;/li&gt;
&lt;li&gt;良好的软件开发素养，能贯彻实施敏捷、测试驱动和持续集成的开发模式。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="加分项"&gt;加分项&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;有开源作品的优先&lt;/li&gt;
&lt;li&gt;有技术博客的优先&lt;/li&gt;
&lt;li&gt;全栈&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="破例项"&gt;破例项&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;学习能力超强，那么不满足以上条件也可以&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="我们可以给你什么？"&gt;我们可以给你什么？&lt;/h3&gt;
&lt;ul&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;li&gt;各种极客产品，例如 Vive，Hololens，划船机……&lt;/li&gt;
&lt;li&gt;每年免费参加技术大会&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="我们的工作方式？"&gt;我们的工作方式？&lt;/h3&gt;
&lt;p&gt;协作：G Suite，Trello，Github，Slack，Sketch&lt;/p&gt;

&lt;p&gt;哲学：自动化是立命之本&lt;/p&gt;
&lt;h3 id="联系方式"&gt;联系方式&lt;/h3&gt;
&lt;p&gt;邮箱：&lt;a href="mailto:kaiwen.zhou@duodian.com" title=""&gt;kaiwen.zhou@duodian.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;公司地址：北京朝阳路 85 号 铜牛电影产业园&lt;/p&gt;</description>
      <author>kevinzhow</author>
      <pubDate>Fri, 31 Mar 2017 16:55:41 +0800</pubDate>
      <link>https://ruby-china.org/topics/32675</link>
      <guid>https://ruby-china.org/topics/32675</guid>
    </item>
    <item>
      <title>给女朋友的 iOS 开发教程 iOS With Girlfriend</title>
      <description>&lt;p&gt;因为女朋友准备学习 iOS 开发，所以我开始录制一系列的 iOS 开发教程的视频，这个系列的名字就叫 iOS With Girlfriend 吧&lt;/p&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2015/76bf341a2d7895dd5f9f88890d20348e.png" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2015/21a3a5bf86eb7f78b997a3902c17a5d1.png" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2015/b65bb93d84cebc7b69168a11c213c6da.png" title="" alt=""&gt;&lt;/p&gt;
&lt;h2 id="第零期：Intro"&gt;第零期：Intro&lt;/h2&gt;
&lt;p&gt;B 站&lt;span class="embed-responsive embed-responsive-16by9"&gt;&lt;iframe class="embed-responsive-item" src="//player.bilibili.com/player.html?aid=2953140" allowfullscreen=""&gt;&lt;/iframe&gt;&lt;/span&gt;/
Youtube&lt;span class="embed-responsive embed-responsive-16by9"&gt;&lt;iframe class="embed-responsive-item" src="//www.youtube.com/embed/LEQpV9znZsk" allowfullscreen=""&gt;&lt;/iframe&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id="第一期：Design"&gt;第一期：Design&lt;/h2&gt;
&lt;p&gt;B 站&lt;span class="embed-responsive embed-responsive-16by9"&gt;&lt;iframe class="embed-responsive-item" src="//player.bilibili.com/player.html?aid=2962044" allowfullscreen=""&gt;&lt;/iframe&gt;&lt;/span&gt;/
Youtube&lt;span class="embed-responsive embed-responsive-16by9"&gt;&lt;iframe class="embed-responsive-item" src="//www.youtube.com/embed/Jfl0ICjnfwc" allowfullscreen=""&gt;&lt;/iframe&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id="第二期：Design An App"&gt;第二期：Design An App&lt;/h2&gt;
&lt;p&gt;B 站&lt;span class="embed-responsive embed-responsive-16by9"&gt;&lt;iframe class="embed-responsive-item" src="//player.bilibili.com/player.html?aid=2999240" allowfullscreen=""&gt;&lt;/iframe&gt;&lt;/span&gt;/
Youtube&lt;span class="embed-responsive embed-responsive-16by9"&gt;&lt;iframe class="embed-responsive-item" src="//www.youtube.com/embed/6sVNdc8naIk" allowfullscreen=""&gt;&lt;/iframe&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <author>kevinzhow</author>
      <pubDate>Sat, 03 Oct 2015 23:30:28 +0800</pubDate>
      <link>https://ruby-china.org/topics/27549</link>
      <guid>https://ruby-china.org/topics/27549</guid>
    </item>
    <item>
      <title>Producter —— 一本关于设计，iOS，营销的书</title>
      <description>&lt;p&gt;&lt;a href="http://producter.io" rel="nofollow" target="_blank" title=""&gt;Producter 官网&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;独立完成一款产品是很多人得梦想，也是我的梦想，但是单单完成一个作品并没有什么价值，真正完成一款优秀的作品的难度远超过了“完成”这个词语。&lt;/p&gt;

&lt;p&gt;设计上的锤炼，编程技艺的精进，营销的思考，让很多人都在起步阶段就放弃了。&lt;/p&gt;

&lt;p&gt;从来没有一本书，去讲如何完整的完成这件事情。&lt;/p&gt;

&lt;p&gt;我觉得应该有一本。&lt;/p&gt;

&lt;p&gt;于是断断续续，经历了一年的时间，我终于在 23 岁生日前写完了这本书。&lt;/p&gt;

&lt;p&gt;完成一件事情着实考验人的耐心，这本书初稿之后又经历了相当大的修订，这种改进和迭代与产品开发何其相似，正如许多创作一样，想要下笔如神是非常困难的，甚至很多老手也不见得可以在第一次就做的比新人要好。真正使得作品脱颖而出的，正是后期对作品的反复打磨与改进。&lt;/p&gt;

&lt;p&gt;在修订过程中，常常会跟朋友吐槽说写书就像绣花一样，尤其是因为最近几年荒废了写作，竟然遇到了很多语法问题（看英语文档看多了）。&lt;/p&gt;

&lt;p&gt;非常感谢 周奕飞 (&lt;a href="/austinchou0126" class="user-mention" title="@austinchou0126"&gt;&lt;i&gt;@&lt;/i&gt;austinchou0126&lt;/a&gt;) 以及 朱宏旭 (&lt;a href="/nixzhu" class="user-mention" title="@nixzhu"&gt;&lt;i&gt;@&lt;/i&gt;nixzhu&lt;/a&gt;) 对于排版和语法上的修正。&lt;/p&gt;

&lt;p&gt;对了——&lt;/p&gt;

&lt;p&gt;这本书只是一个开始，和产品一起成长，做出越来越优秀的东西才是最大的快乐。&lt;/p&gt;
&lt;h2 id="本书的读者"&gt;本书的读者&lt;/h2&gt;
&lt;p&gt;这本书主要涵盖了&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;设计原理&lt;/li&gt;
&lt;li&gt;原型，动效，交互设计&lt;/li&gt;
&lt;li&gt;iOS 开发&lt;/li&gt;
&lt;li&gt;营销&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;这四个部分，以 &lt;strong&gt;小记&lt;/strong&gt; 作为例子，完整的还原了一款产品从想法到编码，再到上架，以及营销的全过程。
如果你什么都不懂，面对未来正充满困惑，那么这是一本很好的入门书籍，如果你只知其一二，那么这本书也是很好的补全指引。&lt;/p&gt;

&lt;p&gt;不过，由于产品的世界不存在只要 A 必然发生 B 的真理，所以请带着怀疑的眼光去审视每条结论，学会如何思考才能淡定得面对这个不测的世界。&lt;/p&gt;
&lt;h2 id="解疑"&gt;解疑&lt;/h2&gt;
&lt;p&gt;本书发布后会持续迭代更新，这也是电子书发行的好处。如果你对本书有任何意见，欢迎写 email 给我&lt;/p&gt;

&lt;p&gt;kevinchou.c@gmail.com&lt;/p&gt;

&lt;p&gt;或直接关注我的微博 &lt;a href="http://weibo.com/kevinzhow" rel="nofollow" target="_blank" title=""&gt;@周楷雯 Kevin&lt;/a&gt; 与我交流。&lt;/p&gt;
&lt;h2 id="目录"&gt;目录&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;前言&lt;/li&gt;
&lt;li&gt;Product 设计驱动开发&lt;/li&gt;
&lt;li&gt;Product Design 设计的感觉

&lt;ul&gt;
&lt;li&gt;从感觉开始&lt;/li&gt;
&lt;li&gt;Clarity&lt;/li&gt;
&lt;li&gt;Clean&lt;/li&gt;
&lt;li&gt;Cool&lt;/li&gt;
&lt;li&gt;寻找灵感&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Product Design 产品的起点

&lt;ul&gt;
&lt;li&gt;为什么做 小记&lt;/li&gt;
&lt;li&gt;设计工具的选择&lt;/li&gt;
&lt;li&gt;Sketch 基础&lt;/li&gt;
&lt;li&gt;Sketch 实践 绘制图标&lt;/li&gt;
&lt;li&gt;Framer 基础&lt;/li&gt;
&lt;li&gt;设计 小记&lt;/li&gt;
&lt;li&gt;交互设计&lt;/li&gt;
&lt;li&gt;小记 的交互设计&lt;/li&gt;
&lt;li&gt;Hydro 的交互与体验设计&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Product Code 产品的实现

&lt;ul&gt;
&lt;li&gt;成为开发者&lt;/li&gt;
&lt;li&gt;Swift&lt;/li&gt;
&lt;li&gt;iOS App 是什么&lt;/li&gt;
&lt;li&gt;在年之外&lt;/li&gt;
&lt;li&gt;使用 Git 管理你的代码&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;li&gt;编辑日记&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Product ReDesign 产品的迭代

&lt;ul&gt;
&lt;li&gt;优化&lt;/li&gt;
&lt;li&gt;动画库 Facebook POP&lt;/li&gt;
&lt;li&gt;CocoaPods&lt;/li&gt;
&lt;li&gt;Crashlystics&lt;/li&gt;
&lt;li&gt;更通用&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Product Market 产品的营销

&lt;ul&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;/li&gt;
&lt;li&gt;Product Extra 动效

&lt;ul&gt;
&lt;li&gt;Motion Graphic&lt;/li&gt;
&lt;li&gt;Waver 声波效果&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Product Next 新篇章&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="http://producter.io" rel="nofollow" target="_blank" title=""&gt;Producter 官网&lt;/a&gt;&lt;/p&gt;</description>
      <author>kevinzhow</author>
      <pubDate>Mon, 08 Jun 2015 05:51:50 +0800</pubDate>
      <link>https://ruby-china.org/topics/25919</link>
      <guid>https://ruby-china.org/topics/25919</guid>
    </item>
    <item>
      <title>为什么搜索栏里一搜就挂了？</title>
      <description>&lt;p&gt;搜索不工作了么……&lt;/p&gt;</description>
      <author>kevinzhow</author>
      <pubDate>Mon, 16 Mar 2015 07:17:24 +0800</pubDate>
      <link>https://ruby-china.org/topics/24668</link>
      <guid>https://ruby-china.org/topics/24668</guid>
    </item>
    <item>
      <title>PNChart 的 Swift 版本实现</title>
      <description>&lt;p&gt;嗯，学习 Swift 最好的方式当然是把自己的开源库用 Swift 重写一遍了。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/kevinzhow/PNChart-Swift" rel="nofollow" target="_blank"&gt;https://github.com/kevinzhow/PNChart-Swift&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;刚重写完 LineChart，后续进行中&lt;/p&gt;</description>
      <author>kevinzhow</author>
      <pubDate>Thu, 05 Jun 2014 06:36:54 +0800</pubDate>
      <link>https://ruby-china.org/topics/19746</link>
      <guid>https://ruby-china.org/topics/19746</guid>
    </item>
    <item>
      <title>[iOS &amp; Mac] Milkpass 或许这才是你的密码管理软件</title>
      <description>&lt;p&gt;所有一切要说的，都在这个视频里&lt;/p&gt;

&lt;p&gt;&lt;span class="embed-responsive embed-responsive-16by9"&gt;&lt;iframe class="embed-responsive-item" src="//player.youku.com/embed/XNjgwNDAwMzI4" allowfullscreen=""&gt;&lt;/iframe&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;另外，iOS 版本和 Mac 版本都会免费上架 AppStore&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;已上架，撒花
&lt;a href="http://milkpass.piner.me" rel="nofollow" target="_blank"&gt;http://milkpass.piner.me&lt;/a&gt;&lt;/p&gt;</description>
      <author>kevinzhow</author>
      <pubDate>Mon, 03 Mar 2014 23:33:41 +0800</pubDate>
      <link>https://ruby-china.org/topics/17642</link>
      <guid>https://ruby-china.org/topics/17642</guid>
    </item>
    <item>
      <title>接吻世界图——来围观世界的情侣都在哪里接吻呢</title>
      <description>&lt;p&gt;&lt;img src="//l.ruby-china.com/photo/2014/01244b0d66e1557d55006fdf7da72532.png" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;刚刚留下了 N 个接吻。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://catch.la/kiss/en_us/" rel="nofollow" target="_blank"&gt;http://catch.la/kiss/en_us/&lt;/a&gt;&lt;/p&gt;</description>
      <author>kevinzhow</author>
      <pubDate>Thu, 13 Feb 2014 20:58:38 +0800</pubDate>
      <link>https://ruby-china.org/topics/17235</link>
      <guid>https://ruby-china.org/topics/17235</guid>
    </item>
    <item>
      <title>发现一种非常好喝的咖啡 Cafe de Damon，顺便求大家觉得好喝的咖啡</title>
      <description>&lt;p&gt;之前我姐去韩国带回来的，一直搞不懂是什么牌子，今天回老家见面一问，才知道是这个牌子的
官网在此&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.jardin.co.kr" rel="nofollow" target="_blank"&gt;http://www.jardin.co.kr&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;cafe de damon original coffee mix is a drink for happy moments. the solubility and taste of the existing damon cafe coffee mix have been improved. how about enjoying a sensual european softness and the mild aroma of &lt;strong&gt;100% arabican&lt;/strong&gt; coffee beans cafe de damon uses strictly selected 100% arabican beans only.&lt;/p&gt;

&lt;p&gt;味道非常醇香，可能和我喝的咖啡品类少也有关系，觉得这个最好喝了。&lt;/p&gt;

&lt;p&gt;不知道大家喝什么很好喝的咖啡呢？&lt;/p&gt;</description>
      <author>kevinzhow</author>
      <pubDate>Wed, 29 Jan 2014 07:17:03 +0800</pubDate>
      <link>https://ruby-china.org/topics/17045</link>
      <guid>https://ruby-china.org/topics/17045</guid>
    </item>
    <item>
      <title>Production 下大家都是怎么解决定时任务的？</title>
      <description>&lt;p&gt;1.Rake
这个不用说了，Cron + Rake 是最常规的，但是对于短任务，却要花长时间初始化资源的情况这个就不是那么合适，所以我用了下面的方法&lt;/p&gt;

&lt;p&gt;2.HTTP Request
Cron 一个定时的 HTTP Request，来触发任务处理，目前没有遇到什么问题&lt;/p&gt;

&lt;p&gt;不知道大家都在有什么方法，欢迎讨论&lt;/p&gt;</description>
      <author>kevinzhow</author>
      <pubDate>Sun, 05 Jan 2014 18:43:52 +0800</pubDate>
      <link>https://ruby-china.org/topics/16641</link>
      <guid>https://ruby-china.org/topics/16641</guid>
    </item>
    <item>
      <title>PNChart 增加了新的 Circle 模式，欢迎 Fork</title>
      <description>&lt;p&gt;之前在推上说等过了 1000 star 我就更新个新模式，加上 Callback，Callback 暂时还没加，不过新模式已经好了，另外 Pie Chart 也在计划中。&lt;/p&gt;

&lt;p&gt;&lt;img src="http://ww1.sinaimg.cn/bmiddle/68c9c44djw1eb4b0fh8kug208u0fo4qp.gif" title="" alt="Demo"&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/kevinzhow/PNChart" rel="nofollow" target="_blank"&gt;https://github.com/kevinzhow/PNChart&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;快来 Fork Me!&lt;/p&gt;</description>
      <author>kevinzhow</author>
      <pubDate>Sun, 01 Dec 2013 17:11:14 +0800</pubDate>
      <link>https://ruby-china.org/topics/15924</link>
      <guid>https://ruby-china.org/topics/15924</guid>
    </item>
    <item>
      <title>超简约，超易用， iOS 图表库 PNChart 开源！(NO.1 Trending in Objective-C on Github today)</title>
      <description>&lt;p&gt;Piner 在不久前要做 Chart 功能的时候，找了半天各种纠结，竟然没有一个好看又简单易用的。&lt;/p&gt;

&lt;p&gt;So，我写了这个超简约，超易用，带有动画效果的 Chart 库，已支持 Line 和 Bar 两种模式。&lt;/p&gt;

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

&lt;p&gt;下图是在 &lt;a href="https://itunes.apple.com/us/app/piner/id637706410" rel="nofollow" target="_blank" title=""&gt;Piner&lt;/a&gt;  2.0 中应用的效果（这个 Feature 还没上架）&lt;/p&gt;

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

&lt;p&gt;今天收到一封外国友人的 Email 说“I found your PNChart repo on trending obj-c repos for today on Github. It looks simple and delicious library. I want to contribute open source objc -especially for iOS- projects. Do you want me to look at your PNChart project? Maybe I can add some different graph types? “&lt;/p&gt;

&lt;p&gt;我才知道今天是 NO.1 Trending in Objective-C on Github，总排名第六（超过了 Facebook 那个 presto）&lt;/p&gt;

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

&lt;p&gt;以及首页&lt;/p&gt;

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

&lt;p&gt;后来偶也因此 NO.2 Developer Trending in Objective-C on Github (总榜第 7 )&lt;/p&gt;

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

&lt;p&gt;什么都不多说了，快来 Fork&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/kevinzhow/PNChart" rel="nofollow" target="_blank"&gt;https://github.com/kevinzhow/PNChart&lt;/a&gt;&lt;/p&gt;</description>
      <author>kevinzhow</author>
      <pubDate>Mon, 11 Nov 2013 18:22:28 +0800</pubDate>
      <link>https://ruby-china.org/topics/15460</link>
      <guid>https://ruby-china.org/topics/15460</guid>
    </item>
    <item>
      <title>Rubinius 的 Bug ？ undefined method `encoding' on nil:NilClass.</title>
      <description>&lt;p&gt;换成 Puma + Rubinius 后，Oauth redirect back 到服务器会出这样的问题
这是 Rubinius 的 Bug 么……&lt;/p&gt;

&lt;p&gt;切换回去 MRI
问题解决……&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Started GET &lt;span class="s2"&gt;"/auth/twitter"&lt;/span&gt; &lt;span class="k"&gt;for &lt;/span&gt;xxx.xxx.xxx.xxx at 2013-11-05 06:12:42 +0000

NoMethodError &lt;span class="o"&gt;(&lt;/span&gt;undefined method encoding&lt;span class="s1"&gt;' on nil:NilClass.):
kernel/delta/kernel.rb:78:inencoding (method_missing)'&lt;/span&gt;
rubysl-cgi &lt;span class="o"&gt;(&lt;/span&gt;2.0.0&lt;span class="o"&gt;)&lt;/span&gt; lib/cgi/util.rb:7:in escape&lt;span class="s1"&gt;'
oauth (0.4.7) lib/oauth/tokens/request_token.rb:28:inbuild_authorize_url'&lt;/span&gt;
kernel/common/enumerable.rb:49:in collect&lt;span class="s1"&gt;'
kernel/common/hash.rb:342:ineach'&lt;/span&gt;
kernel/common/enumerable.rb:48:in map &lt;span class="o"&gt;(&lt;/span&gt;collect&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="s1"&gt;'
oauth (0.4.7) lib/oauth/tokens/request_token.rb:28:inbuild_authorize_url'&lt;/span&gt;
oauth &lt;span class="o"&gt;(&lt;/span&gt;0.4.7&lt;span class="o"&gt;)&lt;/span&gt; lib/oauth/tokens/request_token.rb:9:in authorize_url&lt;span class="s1"&gt;'
omniauth-oauth (1.0.1) lib/omniauth/strategies/oauth.rb:36:inold_request_phase (request_phase)'&lt;/span&gt;
omniauth-twitter &lt;span class="o"&gt;(&lt;/span&gt;1.0.0&lt;span class="o"&gt;)&lt;/span&gt; lib/omniauth/strategies/twitter.rb:63:in request_phase&lt;span class="s1"&gt;'
omniauth (1.1.4) lib/omniauth/strategy.rb:214:inrequest_call'&lt;/span&gt;
omniauth &lt;span class="o"&gt;(&lt;/span&gt;1.1.4&lt;span class="o"&gt;)&lt;/span&gt; lib/omniauth/strategy.rb:181:in call!&lt;span class="s1"&gt;'
omniauth (1.1.4) lib/omniauth/strategy.rb:164:incall'&lt;/span&gt;
omniauth &lt;span class="o"&gt;(&lt;/span&gt;1.1.4&lt;span class="o"&gt;)&lt;/span&gt; lib/omniauth/builder.rb:49:in call&lt;span class="s1"&gt;'
mongoid (3.1.4) lib/rack/mongoid/middleware/identity_map.rb:34:incall'&lt;/span&gt;
mongoid &lt;span class="o"&gt;(&lt;/span&gt;3.1.4&lt;span class="o"&gt;)&lt;/span&gt; lib/mongoid/unit_of_work.rb:39:in unit_of_work&lt;span class="s1"&gt;'
mongoid (3.1.4) lib/rack/mongoid/middleware/identity_map.rb:34:incall'&lt;/span&gt;
warden &lt;span class="o"&gt;(&lt;/span&gt;1.2.3&lt;span class="o"&gt;)&lt;/span&gt; lib/warden/manager.rb:35:in call&lt;span class="s1"&gt;'
kernel/bootstrap/proc.rb:20:incall'&lt;/span&gt;
kernel/common/throw_catch.rb:30:in catch&lt;span class="s1"&gt;'
kernel/common/throw_catch.rb:7:inregister'&lt;/span&gt;
kernel/common/throw_catch.rb:29:in catch&lt;span class="s1"&gt;'
warden (1.2.3) lib/warden/manager.rb:34:incall'&lt;/span&gt;
actionpack &lt;span class="o"&gt;(&lt;/span&gt;3.2.14&lt;span class="o"&gt;)&lt;/span&gt; lib/action_dispatch/middleware/best_standards_support.rb:17:in call&lt;span class="s1"&gt;'
rack (1.4.5) lib/rack/etag.rb:23:incall'&lt;/span&gt;
rack &lt;span class="o"&gt;(&lt;/span&gt;1.4.5&lt;span class="o"&gt;)&lt;/span&gt; lib/rack/conditionalget.rb:25:in call&lt;span class="s1"&gt;'
actionpack (3.2.14) lib/action_dispatch/middleware/head.rb:14:incall'&lt;/span&gt;
actionpack &lt;span class="o"&gt;(&lt;/span&gt;3.2.14&lt;span class="o"&gt;)&lt;/span&gt; lib/action_dispatch/middleware/params_parser.rb:21:in call&lt;span class="s1"&gt;'
actionpack (3.2.14) lib/action_dispatch/middleware/flash.rb:242:incall'&lt;/span&gt;
rack &lt;span class="o"&gt;(&lt;/span&gt;1.4.5&lt;span class="o"&gt;)&lt;/span&gt; lib/rack/session/abstract/id.rb:210:in context&lt;span class="s1"&gt;'
rack (1.4.5) lib/rack/session/abstract/id.rb:205:incall'&lt;/span&gt;
actionpack &lt;span class="o"&gt;(&lt;/span&gt;3.2.14&lt;span class="o"&gt;)&lt;/span&gt; lib/action_dispatch/middleware/cookies.rb:341:in call&lt;span class="s1"&gt;'
actionpack (3.2.14) lib/action_dispatch/middleware/callbacks.rb:28:incall'&lt;/span&gt;
activesupport &lt;span class="o"&gt;(&lt;/span&gt;3.2.14&lt;span class="o"&gt;)&lt;/span&gt; lib/active_support/callbacks.rb:405:in _run__1407416434714871310__call__1338411874204908663__callbacks&lt;span class="s1"&gt;'
activesupport (3.2.14) lib/active_support/callbacks.rb:405:inrun_callback'&lt;/span&gt;
activesupport &lt;span class="o"&gt;(&lt;/span&gt;3.2.14&lt;span class="o"&gt;)&lt;/span&gt; lib/active_support/callbacks.rb:385:in _run_call_callbacks&lt;span class="s1"&gt;'
activesupport (3.2.14) lib/active_support/callbacks.rb:81:inrun_callbacks'&lt;/span&gt;
actionpack &lt;span class="o"&gt;(&lt;/span&gt;3.2.14&lt;span class="o"&gt;)&lt;/span&gt; lib/action_dispatch/middleware/callbacks.rb:27:in call&lt;span class="s1"&gt;'
actionpack (3.2.14) lib/action_dispatch/middleware/remote_ip.rb:31:incall'&lt;/span&gt;
actionpack &lt;span class="o"&gt;(&lt;/span&gt;3.2.14&lt;span class="o"&gt;)&lt;/span&gt; lib/action_dispatch/middleware/debug_exceptions.rb:16:in call&lt;span class="s1"&gt;'
actionpack (3.2.14) lib/action_dispatch/middleware/show_exceptions.rb:56:incall'&lt;/span&gt;
railties &lt;span class="o"&gt;(&lt;/span&gt;3.2.14&lt;span class="o"&gt;)&lt;/span&gt; lib/rails/rack/logger.rb:32:in call_app&lt;span class="s1"&gt;'
railties (3.2.14) lib/rails/rack/logger.rb:18:incall'&lt;/span&gt;
actionpack &lt;span class="o"&gt;(&lt;/span&gt;3.2.14&lt;span class="o"&gt;)&lt;/span&gt; lib/action_dispatch/middleware/request_id.rb:22:in call&lt;span class="s1"&gt;'
rack (1.4.5) lib/rack/methodoverride.rb:21:incall'&lt;/span&gt;
rack &lt;span class="o"&gt;(&lt;/span&gt;1.4.5&lt;span class="o"&gt;)&lt;/span&gt; lib/rack/runtime.rb:17:in call&lt;span class="s1"&gt;'
activesupport (3.2.14) lib/active_support/cache/strategy/local_cache.rb:72:incall'&lt;/span&gt;
rack-cache &lt;span class="o"&gt;(&lt;/span&gt;1.2&lt;span class="o"&gt;)&lt;/span&gt; lib/rack/cache/context.rb:136:in forward&lt;span class="s1"&gt;'
rack-cache (1.2) lib/rack/cache/context.rb:245:infetch'&lt;/span&gt;
rack-cache &lt;span class="o"&gt;(&lt;/span&gt;1.2&lt;span class="o"&gt;)&lt;/span&gt; lib/rack/cache/context.rb:185:in lookup&lt;span class="s1"&gt;'
rack-cache (1.2) lib/rack/cache/context.rb:66:incall!'&lt;/span&gt;
rack-cache &lt;span class="o"&gt;(&lt;/span&gt;1.2&lt;span class="o"&gt;)&lt;/span&gt; lib/rack/cache/context.rb:51:in call&lt;span class="s1"&gt;'
railties (3.2.14) lib/rails/engine.rb:484:incall'&lt;/span&gt;
railties &lt;span class="o"&gt;(&lt;/span&gt;3.2.14&lt;span class="o"&gt;)&lt;/span&gt; lib/rails/application.rb:231:in call&lt;span class="s1"&gt;'
railties (3.2.14) lib/rails/railtie/configurable.rb:30:incall (method_missing)'&lt;/span&gt;
puma &lt;span class="o"&gt;(&lt;/span&gt;2.6.0&lt;span class="o"&gt;)&lt;/span&gt; lib/puma/configuration.rb:68:in call&lt;span class="s1"&gt;'
puma (2.6.0) lib/puma/server.rb:486:inhandle_request'&lt;/span&gt;
puma &lt;span class="o"&gt;(&lt;/span&gt;2.6.0&lt;span class="o"&gt;)&lt;/span&gt; lib/puma/server.rb:357:in process_client&lt;span class="s1"&gt;'
puma (2.6.0) lib/puma/server.rb:250:inrun'&lt;/span&gt;
kernel/bootstrap/proc.rb:20:in call&lt;span class="s1"&gt;'
puma (2.6.0) lib/puma/thread_pool.rb:92:inspawn_thread'&lt;/span&gt;
kernel/bootstrap/proc.rb:20:in call&lt;span class="s1"&gt;'
kernel/bootstrap/thread.rb:390:inrun__'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;</description>
      <author>kevinzhow</author>
      <pubDate>Tue, 05 Nov 2013 14:24:40 +0800</pubDate>
      <link>https://ruby-china.org/topics/15316</link>
      <guid>https://ruby-china.org/topics/15316</guid>
    </item>
    <item>
      <title>RVM + Rubinius + Rails + Puma + Nginx + Capistrano + Ubuntu 12.04 配置方案</title>
      <description>&lt;p&gt;希望这部分折腾的时间可以越来越少……&lt;/p&gt;

&lt;p&gt;Blog 原文 &lt;a href="http://imkevin.me/post/65620573432/rvm-rubinius-rails-puma-nginx-capistrano" rel="nofollow" target="_blank"&gt;http://imkevin.me/post/65620573432/rvm-rubinius-rails-puma-nginx-capistrano&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;参考 &lt;a href="http://tommy.chheng.com/2013/01/23/deploying-a-rails-app-on-nginxpuma-with-capistrano/" rel="nofollow" target="_blank"&gt;http://tommy.chheng.com/2013/01/23/deploying-a-rails-app-on-nginxpuma-with-capistrano/&lt;/a&gt;
参考 &lt;a href="http://natewienert.com/rubinius-plus-puma-plus-chruby-plus-capistrano-on-ubuntu" rel="nofollow" target="_blank"&gt;http://natewienert.com/rubinius-plus-puma-plus-chruby-plus-capistrano-on-ubuntu&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;1.RVM&lt;/p&gt;

&lt;p&gt;如果没安装的话先安装 RVM&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="se"&gt;\c&lt;/span&gt;url &lt;span class="nt"&gt;-L&lt;/span&gt; https://get.rvm.io | bash &lt;span class="nt"&gt;-s&lt;/span&gt; stable
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;已经安装的话可以更新下&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;rvm get &lt;span class="nb"&gt;head&lt;/span&gt; — auto-dotfiles
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;2.安装 Rubinius&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;rvm &lt;span class="nb"&gt;install &lt;/span&gt;rbx
rvm use rbi —default
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;编辑 ~/.ruby-version&lt;/p&gt;

&lt;p&gt;写上  rbx-2.1.1 (此处视安装的 rbx 版本而定)&lt;/p&gt;

&lt;p&gt;3.Gemfile&lt;/p&gt;

&lt;p&gt;添加&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gem &lt;span class="s2"&gt;"puma"&lt;/span&gt;
gem &lt;span class="s2"&gt;"rubysl"&lt;/span&gt;, &lt;span class="s2"&gt;"~&amp;gt; 2.0"&lt;/span&gt;, platform: :rbx
bundle &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;编辑 config/puma.rb&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;#!/usr/bin/env puma&lt;/span&gt;

&lt;span class="n"&gt;environment&lt;/span&gt; &lt;span class="s2"&gt;"production"&lt;/span&gt;
&lt;span class="n"&gt;basedir&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"path_to_your_app"&lt;/span&gt;
&lt;span class="n"&gt;threads&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;48&lt;/span&gt;

&lt;span class="n"&gt;bind&lt;/span&gt;  &lt;span class="s2"&gt;"unix:///tmp/appname.sock"&lt;/span&gt;
&lt;span class="n"&gt;pidfile&lt;/span&gt;  &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;basedir&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/current/tmp/puma/pid"&lt;/span&gt;
&lt;span class="n"&gt;state_path&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;basedir&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/current/tmp/puma/state"&lt;/span&gt;
&lt;span class="n"&gt;preload_app!&lt;/span&gt;
&lt;span class="n"&gt;activate_control_app&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;5.编辑 nginx.conf&lt;/p&gt;

&lt;p&gt;这里只列出了一些和 puma 有关的部分&lt;/p&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;&lt;span class="n"&gt;upstream&lt;/span&gt; &lt;span class="n"&gt;appname&lt;/span&gt; {
  &lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="n"&gt;unix&lt;/span&gt;:///&lt;span class="n"&gt;tmp&lt;/span&gt;/&lt;span class="n"&gt;appname&lt;/span&gt;.&lt;span class="n"&gt;sock&lt;/span&gt;;
}

&lt;span class="n"&gt;server&lt;/span&gt; {
  &lt;span class="n"&gt;listen&lt;/span&gt; &lt;span class="m"&gt;80&lt;/span&gt;;
  &lt;span class="n"&gt;server_name&lt;/span&gt; &lt;span class="n"&gt;www&lt;/span&gt;.&lt;span class="n"&gt;appname&lt;/span&gt;.&lt;span class="n"&gt;com&lt;/span&gt; &lt;span class="n"&gt;appname&lt;/span&gt;.&lt;span class="n"&gt;com&lt;/span&gt;;
  &lt;span class="n"&gt;location&lt;/span&gt; / {
    &lt;span class="n"&gt;proxy_set_header&lt;/span&gt;   &lt;span class="n"&gt;Host&lt;/span&gt;             $&lt;span class="n"&gt;host&lt;/span&gt;;
    &lt;span class="n"&gt;proxy_set_header&lt;/span&gt;   &lt;span class="n"&gt;X&lt;/span&gt;-&lt;span class="n"&gt;Real&lt;/span&gt;-&lt;span class="n"&gt;IP&lt;/span&gt;        $&lt;span class="n"&gt;remote_addr&lt;/span&gt;;
    &lt;span class="n"&gt;proxy_set_header&lt;/span&gt;   &lt;span class="n"&gt;X&lt;/span&gt;-&lt;span class="n"&gt;Forwarded&lt;/span&gt;-&lt;span class="n"&gt;For&lt;/span&gt;  $&lt;span class="n"&gt;proxy_add_x_forwarded_for&lt;/span&gt;;
    &lt;span class="n"&gt;proxy_redirect&lt;/span&gt; &lt;span class="n"&gt;off&lt;/span&gt;;

    &lt;span class="n"&gt;if&lt;/span&gt; (-&lt;span class="n"&gt;f&lt;/span&gt; $&lt;span class="n"&gt;request_filename&lt;/span&gt;/&lt;span class="n"&gt;index&lt;/span&gt;.&lt;span class="n"&gt;html&lt;/span&gt;) {
        &lt;span class="n"&gt;rewrite&lt;/span&gt; (.*) $&lt;span class="m"&gt;1&lt;/span&gt;/&lt;span class="n"&gt;index&lt;/span&gt;.&lt;span class="n"&gt;html&lt;/span&gt; &lt;span class="n"&gt;break&lt;/span&gt;;
      }

      &lt;span class="n"&gt;if&lt;/span&gt; (-&lt;span class="n"&gt;f&lt;/span&gt; $&lt;span class="n"&gt;request_filename&lt;/span&gt;.&lt;span class="n"&gt;html&lt;/span&gt;) {
        &lt;span class="n"&gt;rewrite&lt;/span&gt; (.*) $&lt;span class="m"&gt;1&lt;/span&gt;.&lt;span class="n"&gt;html&lt;/span&gt; &lt;span class="n"&gt;break&lt;/span&gt;;
      }

      &lt;span class="n"&gt;if&lt;/span&gt; (!-&lt;span class="n"&gt;f&lt;/span&gt; $&lt;span class="n"&gt;request_filename&lt;/span&gt;) {
        &lt;span class="n"&gt;proxy_pass&lt;/span&gt; &lt;span class="n"&gt;http&lt;/span&gt;://&lt;span class="n"&gt;appname&lt;/span&gt;;
        &lt;span class="n"&gt;break&lt;/span&gt;;
      }
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;6.Puma 控制脚本&lt;/p&gt;

&lt;p&gt;从此处获得 &lt;a href="https://github.com/puma/puma/tree/master/tools/jungle" rel="nofollow" target="_blank"&gt;https://github.com/puma/puma/tree/master/tools/jungle&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;我 Server 用的是 Ubuntu 所以用的 init.d 里的脚本&lt;/p&gt;

&lt;p&gt;其操作过程可以见 README.md&lt;/p&gt;

&lt;p&gt;这里列一下和 RVM 配合使用的技巧&lt;/p&gt;

&lt;p&gt;在你安装 RVM 的用户终端，使用 echo $PATH 来获取当前的路径配置&lt;/p&gt;

&lt;p&gt;然后，复制，黏贴到&lt;/p&gt;

&lt;p&gt;puma 这个脚本 line 18 后
PATH=/usr/local/bin:/usr/local/sbin/:/sbin:/usr/sbin:/bin:/usr/bin:your_path
这样可以解决 pumactl 找不到这类的问题&lt;/p&gt;

&lt;p&gt;同样黏贴到&lt;/p&gt;

&lt;p&gt;run-puma 里
PATH=your_path
7.Capistrano&lt;/p&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="ss"&gt;:puma&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="n"&gt;desc&lt;/span&gt; &lt;span class="s2"&gt;"Start Puma"&lt;/span&gt;
  &lt;span class="n"&gt;task&lt;/span&gt; &lt;span class="ss"&gt;:start&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:except&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="ss"&gt;:no_release&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="kp"&gt;true&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;run&lt;/span&gt; &lt;span class="s2"&gt;"mkdir -p &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;current_path&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/tmp/puma"&lt;/span&gt;
    &lt;span class="n"&gt;run&lt;/span&gt; &lt;span class="s2"&gt;"sudo /etc/init.d/puma start &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;application&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
  &lt;span class="n"&gt;after&lt;/span&gt; &lt;span class="s2"&gt;"deploy:start”, “puma:start"&lt;/span&gt;

  &lt;span class="n"&gt;desc&lt;/span&gt; &lt;span class="s2"&gt;"Stop Puma"&lt;/span&gt;
  &lt;span class="n"&gt;task&lt;/span&gt; &lt;span class="ss"&gt;:stop&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:except&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="ss"&gt;:no_release&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="kp"&gt;true&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;run&lt;/span&gt; &lt;span class="s2"&gt;"sudo /etc/init.d/puma stop &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;application&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
  &lt;span class="n"&gt;after&lt;/span&gt; &lt;span class="s2"&gt;"deploy:stop"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"puma:stop"&lt;/span&gt;

  &lt;span class="n"&gt;desc&lt;/span&gt; &lt;span class="s2"&gt;"Restart Puma"&lt;/span&gt;
  &lt;span class="n"&gt;task&lt;/span&gt; &lt;span class="ss"&gt;:restart&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;roles: :app&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
    &lt;span class="n"&gt;run&lt;/span&gt; &lt;span class="s2"&gt;"sudo /etc/init.d/puma restart &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;application&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
  &lt;span class="n"&gt;after&lt;/span&gt; &lt;span class="s2"&gt;"deploy:restart"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"puma:restart"&lt;/span&gt;

  &lt;span class="n"&gt;desc&lt;/span&gt; &lt;span class="s2"&gt;"create a shared tmp dir for puma state files"&lt;/span&gt;
  &lt;span class="n"&gt;task&lt;/span&gt; &lt;span class="ss"&gt;:after_symlink&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;roles: :app&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
    &lt;span class="n"&gt;run&lt;/span&gt; &lt;span class="s2"&gt;"sudo rm -rf &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;release_path&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/tmp"&lt;/span&gt;
    &lt;span class="n"&gt;run&lt;/span&gt; &lt;span class="s2"&gt;"ln -s &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;shared_path&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/tmp &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;release_path&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/tmp"&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
  &lt;span class="n"&gt;after&lt;/span&gt; &lt;span class="s2"&gt;"deploy:create_symlink"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"puma:after_symlink"&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;由此就可以使用 cap deploy:restart 来启动 Server 了&lt;/p&gt;

&lt;p&gt;这里还有一个问题是，开机自启动。
直接按照他们给出的方法可能会无法启动，我的解决方法是在我的 home 目录写了个脚本，然后设定个开机自启动脚本来执行 home 里的这个脚本&lt;/p&gt;

&lt;p&gt;里面有这句&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="k"&gt;do&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;/bin/bash &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt; ‘/etc/init.d/puma start appname’&lt;span class="si"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;希望可以节省后来者的时间……&lt;/p&gt;</description>
      <author>kevinzhow</author>
      <pubDate>Fri, 01 Nov 2013 00:47:22 +0800</pubDate>
      <link>https://ruby-china.org/topics/15198</link>
      <guid>https://ruby-china.org/topics/15198</guid>
    </item>
    <item>
      <title>求教，请问如何让一些 field 不被 render 出来</title>
      <description>&lt;p&gt;嗯，事情是这样的
现在我把 Ember.js 和 rails 以及 mongodb 一起用，所以需要把一些数据以 json 发送到前台交给 emberjs
但是，比如我传递&lt;a href="/user" class="user-mention" title="@user"&gt;&lt;i&gt;@&lt;/i&gt;user&lt;/a&gt;的时候，用&lt;a href="/user.to_json" class="user-mention" title="@user.to_json"&gt;&lt;i&gt;@&lt;/i&gt;user.to_json&lt;/a&gt; 然后他会把一些比如用户 private_token 之类的 field 也发出来了，有没有什么方法来限定下某些 field 不传出来。
但是需要保证&lt;a href="/user.field" class="user-mention" title="@user.field"&gt;&lt;i&gt;@&lt;/i&gt;user.field&lt;/a&gt;的时候还能读到这个 field？
谢谢！&lt;/p&gt;</description>
      <author>kevinzhow</author>
      <pubDate>Mon, 08 Oct 2012 01:53:22 +0800</pubDate>
      <link>https://ruby-china.org/topics/5912</link>
      <guid>https://ruby-china.org/topics/5912</guid>
    </item>
    <item>
      <title>提醒里的超出宽度时候的 BUG</title>
      <description>&lt;p&gt;如图所示。。
Safari 6 
&lt;img src="//l.ruby-china.com/photo/264a34be40757dc240f81e7a37386e16.png" title="" alt=""&gt;&lt;/p&gt;</description>
      <author>kevinzhow</author>
      <pubDate>Sun, 12 Aug 2012 21:10:34 +0800</pubDate>
      <link>https://ruby-china.org/topics/4893</link>
      <guid>https://ruby-china.org/topics/4893</guid>
    </item>
    <item>
      <title>回家的路上惊现三攻三防机枪兵</title>
      <description>&lt;p&gt;&lt;span class="embed-responsive embed-responsive-16by9"&gt;&lt;iframe class="embed-responsive-item" src="//player.youku.com/embed/XMzc2MTI2MDQw" allowfullscreen=""&gt;&lt;/iframe&gt;&lt;/span&gt;  &lt;/p&gt;</description>
      <author>kevinzhow</author>
      <pubDate>Wed, 04 Apr 2012 18:14:10 +0800</pubDate>
      <link>https://ruby-china.org/topics/2378</link>
      <guid>https://ruby-china.org/topics/2378</guid>
    </item>
  </channel>
</rss>
