<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Zoker (Zoker)</title>
    <link>https://ruby-china.org/Zoker</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>[深圳/北京] Gitee 招聘 Rails 中高级工程师</title>
      <description>&lt;blockquote&gt;
&lt;p&gt;好久不见，无意间翻了下自己在 Ruby China 的发帖记录，回想起八年前我还是一个刚毕业懵懵懂懂的连 Tab 自动不全都不知道是什么的“小学生”，在开源中国 Gitee 的八年学到了太多太多，beyond coding，更多的时间在跟客户打交道，代码却是越写越少了，年龄大了看到点东西就容易感慨，进入正题 &lt;img title=":laughing:" alt="😆" src="https://twemoji.ruby-china.com/2/svg/1f606.svg" class="twemoji"&gt;   &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;本想着把 JD 复制过来，但是明显噪音太多，时间宝贵，不如从我的角度挑重点来说 &lt;img title=":wink:" alt="😉" src="https://twemoji.ruby-china.com/2/svg/1f609.svg" class="twemoji"&gt; &lt;/p&gt;
&lt;h2 id="公司？"&gt;公司？&lt;/h2&gt;
&lt;p&gt;开源中国是红薯老大在 2008 年创建的开源资讯网站，后来进一步发展为开源社区，为开发者提供一个分享、交流的地方。目前公司业务主要是在开发者社区、培训、会务以及核心的研发协作平台。&lt;/p&gt;
&lt;h2 id="产品？"&gt;产品？&lt;/h2&gt;
&lt;p&gt;Gitee 是开源中国 2013 年推出的代码托管平台，最初是基于 Gitlab 5.1 二开的，目前为了适应千万级的仓库使用，已经在应用和架构上做了颠覆式的重构。&lt;/p&gt;

&lt;p&gt;目前整个 Gitee 的业务分为两种，一种是我们在线上所使用的 SAAS 产品，我们称为公有云，目前的客户主要是中小型企业，如视觉中国、文思海辉、太极等；另外一种是为了迎合企业安全、监管以及审计的需求所推出的内部部署产品，我们称为私有云，目前的客户主要分布在银行证券及政府机关，如招商银行、光大银行、中国海关、比亚迪等。&lt;/p&gt;
&lt;h2 id="技术栈？"&gt;技术栈？&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;应用方面依旧是基于 Ruby on Rails，我们使用 Ruby 来进行我们后台业务逻辑的开发，前端主要是 Vue 以及 React。&lt;/li&gt;
&lt;li&gt;架构层面我们使用 Go 实现了我们自研的分片架构，当然还有一些 C++ 实现的组件，目前计划用 Go 来逐步替换。&lt;/li&gt;
&lt;li&gt;研发效能方面我们使用 Ansible/Jenkins/Docker/K8S 等打造自己的内部 CI 流程。&lt;/li&gt;
&lt;li&gt;其他方面，我们还有一些业务涉及到 PHP、Python 甚至 Lua 等，语言只是工具，用一门学一门才是王道。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="愿景？"&gt;愿景？&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;为啥要跟我谈愿景，请跟我谈钱&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;钱还是要谈的，但是仔细想想如知道要做的事情有什么意义，岂不是更美？&lt;/p&gt;

&lt;p&gt;我们的愿景很简单：打造国内开源生态，为国内企业提供优质的研发协作工具，不止于做中国的 Github，要成为世界的 Gitee&lt;/p&gt;
&lt;h2 id="谈谈钱？"&gt;谈谈钱？&lt;/h2&gt;
&lt;p&gt;Ruby 中高级开发工程师 20K-35K，14 薪，期权激励（别说是饼，好几个同事都吃到了 &lt;img title=":laughing:" alt="😆" src="https://twemoji.ruby-china.com/2/svg/1f606.svg" class="twemoji"&gt; ）&lt;/p&gt;

&lt;p&gt;那么有同学肯定会有疑惑，你们拿什么赚钱？确实，Gitee 坚持了这么久，其实一直在烧钱，一直非常苦逼的坚持，基本上没在推广上花什么钱，钱都放在了硬件成本以及安防上面，为什么现在有钱招人了？因为我们现在是百度战略投资了，所以扩招大力发展业务是在规划之内的。&lt;/p&gt;
&lt;h2 id="来了做什么？"&gt;来了做什么？&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;公有云研发协作系统的业务研发，包含代码托管、项目管理系统。&lt;/li&gt;
&lt;li&gt;私有云涉及到各个客户的定制需求，会更多的跟客户打交道。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="只要 Ruby？"&gt;只要 Ruby？&lt;/h2&gt;
&lt;p&gt;Go、前端、DevOps 工程师、产品经理、运营专家等都要&lt;/p&gt;
&lt;h2 id="想试试？"&gt;想试试？&lt;/h2&gt;
&lt;p&gt;发送简历到 zhoukai@oschina.cn 即可&lt;/p&gt;
&lt;h2 id="办公环境如何？"&gt;办公环境如何？&lt;/h2&gt;
&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/Zoker/4559cc7f-45f2-4a10-b3b9-fc1c5f9d4e7e.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/Zoker/61c1dde4-824d-402a-bcf2-60c4ea2df247.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/Zoker/df02ea16-8215-4caf-b284-a00a8e81be79.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/Zoker/5c67c5c3-07c1-4635-ad35-19c60c033f43.png!large" title="" alt=""&gt;&lt;/p&gt;
&lt;h2 id="还有啥？"&gt;还有啥？&lt;/h2&gt;
&lt;p&gt;暂时想不到了，有想了解的可以 mail zhangliwen@oschina.cn&lt;/p&gt;
&lt;h2 id="最后"&gt;最后&lt;/h2&gt;
&lt;p&gt;不要停下自我提升的脚步，想想随着年龄的增长，房贷、车贷、小孩、父母各种压力之下，你是想要滥竽充数的心惊胆战，还是要怀才不遇的怆然涕下？&lt;/p&gt;</description>
      <author>Zoker</author>
      <pubDate>Sat, 20 Feb 2021 10:44:57 +0800</pubDate>
      <link>https://ruby-china.org/topics/40928</link>
      <guid>https://ruby-china.org/topics/40928</guid>
    </item>
    <item>
      <title>[深圳] 开源中国 Gitee 招聘 Rails 中高级工程师</title>
      <description>&lt;p&gt;&lt;a href="https://gitee.com" rel="nofollow" target="_blank" title=""&gt;Gitee&lt;/a&gt; 是&lt;a href="https://www.oschina.net" rel="nofollow" target="_blank" title=""&gt;开源中国&lt;/a&gt;在 2013 年推出的代码托管&amp;amp;研发协作平台，目前开发者超过 500 万，托管项目超过 1000 万，汇聚几乎所有本土原创开源项目，并于 2016 年推出企业版，提供企业级代码托管服务。&lt;br&gt;
与各大厂商如百度、腾讯、华为等深度合作进行开源项目的生态建设，方舟编译器也成功在 Gitee 进行开源。&lt;/p&gt;
&lt;h4 id="目前的业务板块"&gt;目前的业务板块&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;公有云 - 个人版：为个人开发者提供免费的代码托管平台，助力推动国内开源生态的发展&lt;/li&gt;
&lt;li&gt;公有云 - 企业版：为企业提供专业的项目管理&amp;amp;代码托管服务（目前正在对接 CI/CD 能力）&lt;/li&gt;
&lt;li&gt;公有云 - 高校版：为高校师生提供丰富的研发协作教学场景&lt;/li&gt;
&lt;li&gt;公有云 - 轻量级：为中小型企业提供独立部署的私有实例&lt;/li&gt;
&lt;li&gt;私有云：为大型企业及客户提供本地化部署和内部对接，并提供完善的代码扫描、CI/CD 等能力&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="我们的客户"&gt;我们的客户&lt;/h4&gt;
&lt;p&gt;招商银行、招商证券、光大银行、招商局金融集团、临商银行、比亚迪、SuperMap、iGola、作业盒子、Poisson 等&lt;/p&gt;
&lt;h4 id="岗位职责"&gt;岗位职责&lt;/h4&gt;
&lt;p&gt;负责 Gitee 线上系统的开发和维护&lt;/p&gt;
&lt;h4 id="任职要求"&gt;任职要求&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;有 Ruby on Rails 开发经验，能独立开发中等规模的 Rails 应用&lt;/li&gt;
&lt;li&gt;有 PHP、Go、Python 等 Web 开发经验亦可转 Ruby&lt;/li&gt;
&lt;li&gt;掌握 CSS/JavaScript 技能，能够独立实现所需的前端效果&lt;/li&gt;
&lt;li&gt;熟练使用 Git 版本控制系统，日常工作环境为类 Unix&lt;/li&gt;
&lt;li&gt;熟悉常用的数据库、缓存技术，如 PostgreSQL, MySQL, Redis&lt;/li&gt;
&lt;li&gt;对产品有一定的 Sense 和自己的见解，能够独立设计并完成产品模块&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="优先条件"&gt;优先条件&lt;/h4&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;/ul&gt;
&lt;h4 id="待遇相关"&gt;待遇相关&lt;/h4&gt;
&lt;p&gt;薪资 10K - 30K * 14&lt;/p&gt;

&lt;p&gt;有兴趣的欢迎投简历 zhangliwen@oschina.cn 来沟通更多的细节&lt;/p&gt;</description>
      <author>Zoker</author>
      <pubDate>Tue, 18 Aug 2020 19:24:03 +0800</pubDate>
      <link>https://ruby-china.org/topics/40297</link>
      <guid>https://ruby-china.org/topics/40297</guid>
    </item>
    <item>
      <title>Blogine V1.0.0 - 基于 Ruby on Rails 的开源博客</title>
      <description>&lt;h3 id="Blogine - 基于 Ruby on Rails 的开源博客"&gt;Blogine - 基于 Ruby on Rails 的开源博客&lt;/h3&gt;
&lt;p&gt;项目是基于&lt;code&gt;Rails&lt;/code&gt;的一款开源的个人单博客系统。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://zoker.io/logo-425.svg" title="在这里输入图片标题" alt="输入图片说明"&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;码云： &lt;a href="https://gitee.com/kesin/blogine" rel="nofollow" target="_blank"&gt;https://gitee.com/kesin/blogine&lt;/a&gt;&lt;br&gt;
Github：&lt;a href="https://github.com/kesin/blogine" rel="nofollow" target="_blank"&gt;https://github.com/kesin/blogine&lt;/a&gt;&lt;br&gt;
在线演示 &lt;a href="https://zoker.io/" rel="nofollow" target="_blank"&gt;https://zoker.io/&lt;/a&gt; &lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id="功能"&gt;功能&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;文章发布（MD 编辑器采用码云开源的 &lt;a href="https://gitee.com/benhail/thinker-md" rel="nofollow" target="_blank" title=""&gt;TMD&lt;/a&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;搜索（使用 Solr 进行索引）&lt;/li&gt;
&lt;li&gt;后台管理&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="功能截图"&gt;功能截图&lt;/h4&gt;&lt;h5 id="首页"&gt;首页&lt;/h5&gt;
&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2020/5965a31f-f637-4a4d-857a-0e393f90942e.png!large" title="" alt=""&gt;&lt;/p&gt;
&lt;h5 id="文章界面"&gt;文章界面&lt;/h5&gt;
&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2020/5447dd68-a64b-4e90-87ee-c1f09eb137e4.png!large" title="" alt=""&gt;&lt;/p&gt;
&lt;h5 id="搜索功能"&gt;搜索功能&lt;/h5&gt;
&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2020/89b15087-fa1c-46c8-8657-0520b0a72749.png!large" title="" alt=""&gt;&lt;/p&gt;
&lt;h5 id="后台登录"&gt;后台登录&lt;/h5&gt;
&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2020/43575a70-7165-4413-9194-2777bcc26e29.png!large" title="" alt=""&gt;&lt;/p&gt;
&lt;h5 id="发布博客"&gt;发布博客&lt;/h5&gt;
&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2020/a04b5866-494b-4c3a-ba21-3ee9432eb1a1.png!large" title="" alt=""&gt;&lt;/p&gt;
&lt;h5 id="博客设置"&gt;博客设置&lt;/h5&gt;
&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2020/1a0a2647-13ca-4062-84d9-2e37cbffda7a.png!large" title="" alt=""&gt;&lt;/p&gt;
&lt;h4 id="使用"&gt;使用&lt;/h4&gt;
&lt;p&gt;项目基于 &lt;code&gt;Ruby 2.3.8&lt;/code&gt; 及以上&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;git clone &lt;a href="https://gitee.com/kesin/blogine" rel="nofollow" target="_blank"&gt;https://gitee.com/kesin/blogine&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;cd blogine&lt;/li&gt;
&lt;li&gt;bundle install&lt;/li&gt;
&lt;li&gt;cp database.yml.example database.yml  #修改数据库配置&lt;/li&gt;
&lt;li&gt;cp blogine.yml.example blogine.yml  #修改博客配置&lt;/li&gt;
&lt;li&gt;cp puma.rb.example puma.rb&lt;/li&gt;
&lt;li&gt;bundle exec rake db:migrate&lt;/li&gt;
&lt;li&gt;cp development.rb.example development.rb&lt;/li&gt;
&lt;li&gt;bundle exec puma&lt;/li&gt;
&lt;/ol&gt;
&lt;h5 id="创建用户"&gt;创建用户&lt;/h5&gt;
&lt;p&gt;执行 &lt;code&gt;bundle exec rake 'generate_user['name','email','password']' RAILS_ENV=xxx&lt;/code&gt;&lt;/p&gt;
&lt;h5 id="社交链接修改"&gt;社交链接修改&lt;/h5&gt;
&lt;p&gt;&lt;code&gt;mv app/views/layouts/_social_account.html.haml.example app/views/layouts/_social_account.html.haml&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;访问 &lt;a href="http://127.0.0.1:3003" rel="nofollow" target="_blank"&gt;http://127.0.0.1:3003&lt;/a&gt;&lt;/p&gt;</description>
      <author>Zoker</author>
      <pubDate>Tue, 07 Apr 2020 10:00:14 +0800</pubDate>
      <link>https://ruby-china.org/topics/39704</link>
      <guid>https://ruby-china.org/topics/39704</guid>
    </item>
    <item>
      <title>个人任务管理工具 - Taskover</title>
      <description>&lt;p&gt;这个是学习 VueJs 时的一个 Demo 项目，后来发现管理个人任务挺好用，本着强迫症患者该有的精神，就美化了下界面，设计了个 Logo，然后放出来了，项目很简单，适合 Rails 以及 Vue 初学者学习使用。(烂尾两年终于想起来放出来了 XD)&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;码云： &lt;a href="https://gitee.com/kesin/taskover" rel="nofollow" target="_blank"&gt;https://gitee.com/kesin/taskover&lt;/a&gt;&lt;br&gt;
Github：&lt;a href="https://github.com/kesin/taskover" rel="nofollow" target="_blank"&gt;https://github.com/kesin/taskover&lt;/a&gt;&lt;br&gt;
在线演示 &lt;a href="http://taskover.zoker.io/" rel="nofollow" target="_blank"&gt;http://taskover.zoker.io/&lt;/a&gt; 账号 demo / 111111&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id="功能"&gt;功能&lt;/h4&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;Plan/List/Task 均支持拖拽排序&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="功能截图"&gt;功能截图&lt;/h4&gt;&lt;h5 id="首页"&gt;首页&lt;/h5&gt;
&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2019/b5e109b4-bb0b-41bc-8b1b-15bda091eb8a.png!large" title="" alt=""&gt;&lt;/p&gt;
&lt;h5 id="简易方便的任务分类（Plan）"&gt;简易方便的任务分类（Plan）&lt;/h5&gt;
&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2019/c0a1a462-7183-49b1-ad31-9d2766c3e20c.gif!large" title="" alt=""&gt;&lt;/p&gt;
&lt;h5 id="简单易用的任务分组（List）"&gt;简单易用的任务分组（List）&lt;/h5&gt;
&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2019/be21db3d-1e71-48d8-8b92-9b798ceb2ab4.gif!large" title="" alt=""&gt;&lt;/p&gt;
&lt;h5 id="简单高效的任务管理（Task）"&gt;简单高效的任务管理（Task）&lt;/h5&gt;
&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2019/3dec6a6e-28a8-4980-a42f-849344fd6dd6.gif!large" title="" alt=""&gt;&lt;/p&gt;
&lt;h4 id="使用"&gt;使用&lt;/h4&gt;
&lt;p&gt;项目基于 &lt;code&gt;Ruby 2.3.1&lt;/code&gt; 及以上&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;git clone &lt;a href="https://gitee.com/kesin/taskover" rel="nofollow" target="_blank"&gt;https://gitee.com/kesin/taskover&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;cd taskover&lt;/li&gt;
&lt;li&gt;bundle install&lt;/li&gt;
&lt;li&gt;cp database.yml.example database.yml  #修改数据库配置&lt;/li&gt;
&lt;li&gt;cp puma.rb.example puma.rb&lt;/li&gt;
&lt;li&gt;bundle exec rake db:migrate&lt;/li&gt;
&lt;li&gt;cp development.rb.example development.rb&lt;/li&gt;
&lt;li&gt;bundle exec puma&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;访问 &lt;a href="http://127.0.0.1:3001" rel="nofollow" target="_blank"&gt;http://127.0.0.1:3001&lt;/a&gt;&lt;/p&gt;
&lt;h4 id="在线演示"&gt;在线演示&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;演示地址： &lt;a href="http://115.28.75.212/" rel="nofollow" target="_blank"&gt;http://115.28.75.212/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;演示账号：demo / 111111&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="贡献代码"&gt;贡献代码&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;Fork 项目&lt;/li&gt;
&lt;li&gt;创建本地分支 (&lt;code&gt;git checkout -b my-new-feature&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;提交更改 (&lt;code&gt;git commit -am 'Add some feature'&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;推送到分支 (&lt;code&gt;git push origin my-new-feature&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;创建一个 Pull Request&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id="贡献者"&gt;贡献者&lt;/h4&gt;
&lt;p&gt;&lt;a href="https://zoker.io" rel="nofollow" target="_blank" title=""&gt;&lt;/a&gt;&lt;a href="/Zoker" class="user-mention" title="@Zoker"&gt;&lt;i&gt;@&lt;/i&gt;Zoker&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://gitee.com/frech" rel="nofollow" target="_blank" title=""&gt;&lt;/a&gt;&lt;a href="/Frech" class="user-mention" title="@Frech"&gt;&lt;i&gt;@&lt;/i&gt;Frech&lt;/a&gt;&lt;/p&gt;</description>
      <author>Zoker</author>
      <pubDate>Mon, 02 Dec 2019 21:06:38 +0800</pubDate>
      <link>https://ruby-china.org/topics/39295</link>
      <guid>https://ruby-china.org/topics/39295</guid>
    </item>
    <item>
      <title> [深圳] 码云代码托管平台诚聘 Ruby 开发工程师</title>
      <description>&lt;h3 id="关于码云"&gt;关于码云&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://gitee.com/" rel="nofollow" target="_blank" title=""&gt;码云&lt;/a&gt;是开源中国社区 2013 年推出的基于 Git 的代码托管服务，这个服务是基于 Gitlab 开源软件所开发的，我们在 Gitlab 的基础上做了大量的改进和定制开发，目前已经成为国内最大的代码托管系统，致力于为国内开发者提供优质稳定的托管服务。&lt;/p&gt;

&lt;p&gt;目前用户量已经超 150W，项目数已经超过 200W，我从加入到现在，有幸每年都见证了数据的翻倍，相当振奋人心的一件事。&lt;/p&gt;
&lt;h3 id="任职要求"&gt;任职要求&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;有 Ruby on Rails 开发经验，能独立开发 Rails 应用&lt;/li&gt;
&lt;li&gt;掌握 CSS/JavaScript 技能，能够独立实现所需的前端效果&lt;/li&gt;
&lt;li&gt;熟练使用 Git 版本控制系统，日常工作环境为类 Unix&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="优先条件"&gt;优先条件&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;有数据库调优经验者优先&lt;/li&gt;
&lt;li&gt;有一定的运维能力者优先&lt;/li&gt;
&lt;li&gt;对代码整洁和性能自我要求高&lt;/li&gt;
&lt;li&gt;对产品有一定的 Sense 和自己的见解&lt;/li&gt;
&lt;li&gt;有过前端开发经验者优先&lt;/li&gt;
&lt;li&gt;熟练掌握一种以上的单元测试&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="希望你"&gt;希望你&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;能够善于言谈，能够高效沟通（!important）&lt;/li&gt;
&lt;li&gt;有持续不断自我改善的意识和自我提升的能力&lt;/li&gt;
&lt;li&gt;我们想要提供最好的服务给开发者，不论是设计，性能还是对用户的服务支持，对用户有耐心，积极听取用户意见和建议，及时的处理用户所遇到的问题。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="加入我们，你将"&gt;加入我们，你将&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;写的代码会经历成千上万程序员的考验&lt;/li&gt;
&lt;li&gt;了解到码云的架构以及各个模块&lt;/li&gt;
&lt;li&gt;不仅仅是 Ruby，C++、Go 语言甚至有 Ansible、Docker、ELK、Zabbix 等等先进的运维工具，只要你想参与，如你所愿。&lt;/li&gt;
&lt;li&gt;可以接触到很多大牛，可以积累很多的人脉资源（当然，前提是你善于沟通，愿意走出去沟通）&lt;/li&gt;
&lt;li&gt;有竞争力的薪资福利&lt;/li&gt;
&lt;li&gt;有爱无节操的同事&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="待遇相关"&gt;待遇相关&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;薪资 8K 起，视能力而定，如果你有能力，公司绝不会吝啬。&lt;/li&gt;
&lt;li&gt;上班时间 10:00 － 19:00 午休 2 小时&lt;/li&gt;
&lt;li&gt;五险一金按照深圳比例缴纳&lt;/li&gt;
&lt;li&gt;期权激励&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="联系方式"&gt;联系方式&lt;/h3&gt;
&lt;p&gt;公司地址：深圳市 南山区 科园路 18 号 北科大厦 4002 室
简历请发往 zhangliwen#oschina.cn&lt;/p&gt;</description>
      <author>Zoker</author>
      <pubDate>Wed, 02 Aug 2017 15:40:00 +0800</pubDate>
      <link>https://ruby-china.org/topics/33702</link>
      <guid>https://ruby-china.org/topics/33702</guid>
    </item>
    <item>
      <title>[深圳] 码云代码托管平台诚聘 Ruby 开发工程师，10K 起</title>
      <description>&lt;h3 id="关于码云"&gt;关于码云&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://git.oschina.net/" rel="nofollow" target="_blank" title=""&gt;码云&lt;/a&gt;是开源中国社区 2013 年推出的基于 Git 的代码托管服务，这个服务是基于 Gitlab 开源软件所开发的，我们在 Gitlab 的基础上做了大量的改进和定制开发，目前已经成为国内最大的代码托管系统，致力于为国内开发者提供优质稳定的托管服务。&lt;/p&gt;
&lt;h3 id="任职要求"&gt;任职要求&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;一年以上 Ruby on Rails 开发经验，能独立开发 Rails 应用&lt;/li&gt;
&lt;li&gt;掌握 CSS/JavaScript 技能，能够独立实现所需的前端效果&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;熟练使用 Git 版本控制系统，日常工作环境为类 Unix&lt;/p&gt;
&lt;h3 id="优先条件"&gt;优先条件&lt;/h3&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;具有大并发网站开发经验&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;有一定的运维能力&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;对代码整洁和性能自我要求高&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;对产品有一定的 Sense 和自己的见解&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;有过前端开发经验&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="希望你"&gt;希望你&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;能够善于言谈，能够高效沟通（!important）&lt;/li&gt;
&lt;li&gt;有持续不断自我改善的意识和自我提升的能力&lt;/li&gt;
&lt;li&gt;我们想要提供最好的服务给开发者，不论是设计，性能还是对用户的服务支持，对用户有耐心，积极听取用户意见和建议，及时的处理用户所遇到的问题。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="加入我们，你将"&gt;加入我们，你将&lt;/h3&gt;
&lt;ol&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;/ol&gt;
&lt;h3 id="待遇相关"&gt;待遇相关&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;薪资 10K 起&lt;/li&gt;
&lt;li&gt;福利多多，零食水果随时供应&lt;/li&gt;
&lt;li&gt;不打卡，上班时间 10:00 － 19:00 午休 2 小时，弹性工作制&lt;/li&gt;
&lt;li&gt;五险一金按照深圳比例缴纳&lt;/li&gt;
&lt;li&gt;每个月部门聚餐，每年公司春游和年中旅游&lt;/li&gt;
&lt;li&gt;期权激励&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="联系方式"&gt;联系方式&lt;/h3&gt;
&lt;p&gt;公司地址：深圳市 南山区 科园路 18 号 北科大厦 4002 室
简历请发往 zhangliwen#oschina.cn&lt;/p&gt;

&lt;p&gt;如果对我们开源中国或者码云或者众包感兴趣，可以来我们公司坐坐聊聊，之前跟 &lt;a href="/seabornlee" class="user-mention" title="@seabornlee"&gt;&lt;i&gt;@&lt;/i&gt;seabornlee&lt;/a&gt; 他们团队碰了一下感觉就非常不错，收获很多。&lt;/p&gt;

&lt;p&gt;&lt;em&gt;另外，来面试就送开源礼品，扑克牌，马克杯，开源体恤和无节操的开源内裤～&lt;/em&gt;&lt;/p&gt;</description>
      <author>Zoker</author>
      <pubDate>Mon, 09 May 2016 10:44:08 +0800</pubDate>
      <link>https://ruby-china.org/topics/29952</link>
      <guid>https://ruby-china.org/topics/29952</guid>
    </item>
    <item>
      <title>作为一个软件工程师，你如何调整自己的生活及健康状态？</title>
      <description>&lt;p&gt;平常加班吗？
加班回去女朋友（老婆孩子）有意见吗？
吃饭规律吗？
平时运动吗？
跟家人聊天逛街出 Bug 了怎么办？
周末用户的问题如何处理？
工作和生活分开该如何做到？
……&lt;/p&gt;

&lt;p&gt;作为一个软件工程师，尤其是一个高大上的 Ruby Developer，你如何调整自己的生活及健康状态？&lt;/p&gt;</description>
      <author>Zoker</author>
      <pubDate>Thu, 05 Nov 2015 12:24:44 +0800</pubDate>
      <link>https://ruby-china.org/topics/27962</link>
      <guid>https://ruby-china.org/topics/27962</guid>
    </item>
    <item>
      <title>解决 Rails 4 降到 Rails 3 遇到 Cookies 序列化方式不同导致的 500 问题</title>
      <description>&lt;p&gt;在本地生产环境把&lt;code&gt;Rails4&lt;/code&gt; 切回 &lt;code&gt;Rails3&lt;/code&gt;的时候，一直报 500 错误&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;NoMethodError (undefined method `sweep' for #&amp;lt;Hash:0x007f2888ff0fe8&amp;gt;):
  vendor/bundle/ruby/2.1.0/gems/actionpack-3.2.16/lib/action_dispatch/middleware/flash.rb:239:in `call'
  vendor/bundle/ruby/2.1.0/gems/rack-1.4.5/lib/rack/session/abstract/id.rb:210:in `context'
  vendor/bundle/ruby/2.1.0/gems/rack-1.4.5/lib/rack/session/abstract/id.rb:205:in `call'
  vendor/bundle/ruby/2.1.0/gems/actionpack-3.2.16/lib/action_dispatch/middleware/cookies.rb:341:in `call'
  vendor/bundle/ruby/2.1.0/gems/activerecord-3.2.16/lib/active_record/query_cache.rb:64:in `call'
  vendor/bundle/ruby/2.1.0/gems/activerecord-3.2.16/lib/active_record/connection_adapters/abstract/connection_pool.rb:479:in `call'
  vendor/bundle/ruby/2.1.0/gems/actionpack-3.2.16/lib/action_dispatch/middleware/callbacks.rb:28:in `block in call'
  vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.16/lib/active_support/callbacks.rb:405:in `_run__2392578677261619807__call__2174462519133804783__callbacks'
  vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.16/lib/active_support/callbacks.rb:405:in `__run_callback'
  vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.16/lib/active_support/callbacks.rb:385:in `_run_call_callbacks'
  vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.16/lib/active_support/callbacks.rb:81:in `run_callbacks'
  vendor/bundle/ruby/2.1.0/gems/actionpack-3.2.16/lib/action_dispatch/middleware/callbacks.rb:27:in `call'
  vendor/bundle/ruby/2.1.0/gems/rack-1.4.5/lib/rack/sendfile.rb:102:in `call'
  vendor/bundle/ruby/2.1.0/gems/actionpack-3.2.16/lib/action_dispatch/middleware/remote_ip.rb:31:in `call'
  vendor/bundle/ruby/2.1.0/gems/actionpack-3.2.16/lib/action_dispatch/middleware/debug_exceptions.rb:16:in `call'
  vendor/bundle/ruby/2.1.0/gems/actionpack-3.2.16/lib/action_dispatch/middleware/show_exceptions.rb:56:in `call'
  vendor/bundle/ruby/2.1.0/gems/railties-3.2.16/lib/rails/rack/logger.rb:32:in `call_app'
  vendor/bundle/ruby/2.1.0/gems/railties-3.2.16/lib/rails/rack/logger.rb:16:in `block in call'
  vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.16/lib/active_support/tagged_logging.rb:22:in `tagged'
  vendor/bundle/ruby/2.1.0/gems/railties-3.2.16/lib/rails/rack/logger.rb:16:in `call'
  vendor/bundle/ruby/2.1.0/gems/actionpack-3.2.16/lib/action_dispatch/middleware/request_id.rb:22:in `call'
  vendor/bundle/ruby/2.1.0/gems/rack-1.4.5/lib/rack/methodoverride.rb:21:in `call'
  vendor/bundle/ruby/2.1.0/gems/rack-1.4.5/lib/rack/runtime.rb:17:in `call'
  vendor/bundle/ruby/2.1.0/gems/rack-1.4.5/lib/rack/lock.rb:15:in `call'
  vendor/bundle/ruby/2.1.0/gems/rack-cache-1.2/lib/rack/cache/context.rb:136:in `forward'
  vendor/bundle/ruby/2.1.0/gems/rack-cache-1.2/lib/rack/cache/context.rb:245:in `fetch'
  vendor/bundle/ruby/2.1.0/gems/rack-cache-1.2/lib/rack/cache/context.rb:185:in `lookup'
  vendor/bundle/ruby/2.1.0/gems/rack-cache-1.2/lib/rack/cache/context.rb:66:in `call!'
  vendor/bundle/ruby/2.1.0/gems/rack-cache-1.2/lib/rack/cache/context.rb:51:in `call'
  vendor/bundle/ruby/2.1.0/gems/rack-utf8_sanitizer-1.3.0/lib/rack/utf8_sanitizer.rb:15:in `call'
  vendor/bundle/ruby/2.1.0/gems/railties-3.2.16/lib/rails/engine.rb:484:in `call'
  vendor/bundle/ruby/2.1.0/gems/railties-3.2.16/lib/rails/application.rb:231:in `call'
  vendor/bundle/ruby/2.1.0/gems/railties-3.2.16/lib/rails/railtie/configurable.rb:30:in `method_missing'
  vendor/bundle/ruby/2.1.0/gems/rack-1.4.5/lib/rack/builder.rb:134:in `call'
  vendor/bundle/ruby/2.1.0/gems/rack-1.4.5/lib/rack/urlmap.rb:64:in `block in call'
  vendor/bundle/ruby/2.1.0/gems/rack-1.4.5/lib/rack/urlmap.rb:49:in `each'
  vendor/bundle/ruby/2.1.0/gems/rack-1.4.5/lib/rack/urlmap.rb:49:in `call'
  vendor/bundle/ruby/2.1.0/gems/unicorn-4.9.0/lib/unicorn/http_server.rb:580:in `process_client'
  vendor/bundle/ruby/2.1.0/gems/unicorn-4.9.0/lib/unicorn/http_server.rb:674:in `worker_loop'
  vendor/bundle/ruby/2.1.0/gems/unicorn-4.9.0/lib/unicorn/http_server.rb:529:in `spawn_missing_workers'
  vendor/bundle/ruby/2.1.0/gems/unicorn-4.9.0/lib/unicorn/http_server.rb:140:in `start'
  vendor/bundle/ruby/2.1.0/gems/unicorn-4.9.0/bin/unicorn:126:in `&amp;lt;top (required)&amp;gt;'
  vendor/bundle/ruby/2.1.0/bin/unicorn:23:in `load'
  vendor/bundle/ruby/2.1.0/bin/unicorn:23:in `&amp;lt;main&amp;gt;'
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后搜到这么一篇&lt;a href="http://stackoverflow.com/questions/30916375/errors-like-nomethoderror-undefined-method-sweep-for-hash-after-downgra" rel="nofollow" target="_blank" title=""&gt;帖子&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;才发现原来是&lt;code&gt;Rails4&lt;/code&gt;把&lt;code&gt;Flash&lt;/code&gt;序列化到&lt;code&gt;Cookies&lt;/code&gt;不同于&lt;code&gt;Rails3&lt;/code&gt;，当&lt;code&gt;Rails3&lt;/code&gt;尝试去反序列化&lt;code&gt;Cookies&lt;/code&gt;中的&lt;code&gt;Flash&lt;/code&gt;的时候，就会报如上的错误。
解决方法是如果响应不了&lt;code&gt;sweep&lt;/code&gt;方法，那就把&lt;code&gt;flash cookies&lt;/code&gt;删除让程序重建即可。&lt;/p&gt;

&lt;p&gt;新建文件 &lt;code&gt;config/initializers/rails4_to_rails3_downgradability.rb&lt;/code&gt;&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="no"&gt;Rails&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;VERSION&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;MAJOR&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;

  &lt;span class="k"&gt;module&lt;/span&gt; &lt;span class="nn"&gt;ActionDispatch&lt;/span&gt;
    &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Flash&lt;/span&gt;
      &lt;span class="k"&gt;def&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="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;session&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;env&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'rack.session'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;flash&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'flash'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

          &lt;span class="c1"&gt;# Beginning of change!&lt;/span&gt;

          &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;flash&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;respond_to?&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:sweep&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="n"&gt;flash&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sweep&lt;/span&gt;
          &lt;span class="k"&gt;else&lt;/span&gt;
            &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;delete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"flash"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
          &lt;span class="k"&gt;end&lt;/span&gt;

          &lt;span class="c1"&gt;# End of change!&lt;/span&gt;

        &lt;span class="k"&gt;end&lt;/span&gt;

        &lt;span class="vi"&gt;@app.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="k"&gt;ensure&lt;/span&gt;
        &lt;span class="n"&gt;session&lt;/span&gt;    &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;env&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'rack.session'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
        &lt;span class="n"&gt;flash_hash&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;env&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;KEY&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;flash_hash&lt;/span&gt;
          &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;flash_hash&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;empty?&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;key?&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'flash'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"flash"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;flash_hash&lt;/span&gt;
            &lt;span class="n"&gt;new_hash&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;flash_hash&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dup&lt;/span&gt;
          &lt;span class="k"&gt;else&lt;/span&gt;
            &lt;span class="n"&gt;new_hash&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;flash_hash&lt;/span&gt;
          &lt;span class="k"&gt;end&lt;/span&gt;

          &lt;span class="n"&gt;env&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;KEY&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;new_hash&lt;/span&gt;
        &lt;span class="k"&gt;end&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;key?&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'flash'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'flash'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;empty?&lt;/span&gt;
          &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;delete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'flash'&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;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;strong&gt;总结：要理解各个版本之间的各种差异，才能轻松应对。&lt;/strong&gt;&lt;/p&gt;</description>
      <author>Zoker</author>
      <pubDate>Thu, 29 Oct 2015 14:20:10 +0800</pubDate>
      <link>https://ruby-china.org/topics/27884</link>
      <guid>https://ruby-china.org/topics/27884</guid>
    </item>
    <item>
      <title>记从 Rails 3.2.16 升级到 Rails 4.0 遇到的 Grape 的问题</title>
      <description>&lt;p&gt;最近项目从 &lt;code&gt;Rails 3.2.16&lt;/code&gt; 升级到了 &lt;code&gt;Rails 4.0&lt;/code&gt;，但是并没有升级&lt;code&gt;Grape&lt;/code&gt;，因为工作量的原因，暂时想维持 Api 的现状，因为升级了没有时间去充分的测试，所以并没有升级&lt;code&gt;Grape&lt;/code&gt;，但是问题也就来了&lt;/p&gt;

&lt;p&gt;凌晨突然微信响起，跟我们有 Api 接口接入的一家公司的技术反映所有的 Api 接口都是返回：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{ "message": "401 Unauthorized" }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后自己测了一下，发现没问题啊，因为上线后已经都测试过的，所以感觉是不是使用上的问题？后来跟那边的工程师协同排查了下，发现他们是把所有的参数都放到&lt;code&gt;Json&lt;/code&gt;里面，而我们仅仅测试了&lt;code&gt;Url Params&lt;/code&gt;和&lt;code&gt;Form&lt;/code&gt;等形式。&lt;/p&gt;

&lt;p&gt;接着开始排查问题，猜测应该是&lt;code&gt;token&lt;/code&gt;没有被拿到，在日志里面打出来&lt;code&gt;params&lt;/code&gt;一看，果然，&lt;code&gt;json body&lt;/code&gt;内的参数都不在&lt;code&gt;params&lt;/code&gt;内&lt;/p&gt;

&lt;p&gt;为什么没写进&lt;code&gt;params&lt;/code&gt;呢？尝试了几个方法无果后，万能的 Google 向我投来慈祥的微笑：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Google Search: grape params not load from json body
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;于是找到这么一个帖子：&lt;a href="https://groups.google.com/forum/#!topic/ruby-grape/stXaN2LlPKE" rel="nofollow" target="_blank" title=""&gt;Params is empty and I don't know why&lt;/a&gt;
帖子后面有一个 Issue 的链接：&lt;a href="https://github.com/ruby-grape/grape/issues/417" rel="nofollow" target="_blank" title=""&gt;POST and PUT request params get dropped (rails 4, angularjs)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;原来是&lt;code&gt;Rails 4.0&lt;/code&gt;的问题：&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Rails forgets to rewind the input it reads.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;解决方法就是升级&lt;code&gt;Grape&lt;/code&gt;到&lt;code&gt;0.5.0&lt;/code&gt;(&lt;a href="https://github.com/ruby-grape/grape/commit/37fe09a7e6d1db95982d77ce1e4c5d5376d19ccd" rel="nofollow" target="_blank" title=""&gt;Fix #417&lt;/a&gt;) 之后，或者使用&lt;code&gt;Rails &amp;gt; 4.1&lt;/code&gt;(&lt;a href="https://github.com/rails/rails/commit/f6746c024531740900d79236944ce11c65608cde" rel="nofollow" target="_blank" title=""&gt;Fixed&lt;/a&gt;)
我的临时解决方法是&lt;code&gt;Issue&lt;/code&gt;中提到的，新增&lt;code&gt;config/initializers/grape.rb&lt;/code&gt; 文件：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;module&lt;/span&gt; &lt;span class="nn"&gt;Grape&lt;/span&gt;
  &lt;span class="k"&gt;module&lt;/span&gt; &lt;span class="nn"&gt;Middleware&lt;/span&gt;
    &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Formatter&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;Base&lt;/span&gt;
      &lt;span class="kp"&gt;alias_method&lt;/span&gt; &lt;span class="ss"&gt;:_read_body_input&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:read_body_input&lt;/span&gt;
      &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;read_body_input&lt;/span&gt;
        &lt;span class="n"&gt;env&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'rack.input'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;rewind&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;env&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'rack.input'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="n"&gt;_read_body_input&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;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;后面还是把&lt;code&gt;Grape&lt;/code&gt;升级了吧，希望有人遇到此类问题可以绕过去。&lt;/p&gt;

&lt;p&gt;解决了问题，写了篇帖子 (写帖子比解决问题用时还长)&lt;/p&gt;

&lt;p&gt;点上一根烟，深深抽了一口，望着窗外，心想，这苦逼的程序员啊…&lt;/p&gt;

&lt;p&gt;总结：测试充分，充分测试&lt;/p&gt;</description>
      <author>Zoker</author>
      <pubDate>Sat, 24 Oct 2015 03:51:52 +0800</pubDate>
      <link>https://ruby-china.org/topics/27801</link>
      <guid>https://ruby-china.org/topics/27801</guid>
    </item>
    <item>
      <title>阿里云首期开源众包计划，Rubyist 居然没人？</title>
      <description>&lt;h4 id="以下是个人观点"&gt;以下是个人观点&lt;/h4&gt;
&lt;p&gt;公司的众包项目跟阿里云合作发了几个悬赏，看了下居然有个&lt;code&gt;Ruby SDK&lt;/code&gt;的悬赏，3W 块，而且发布两个小时了，居然没人报名！？
而&lt;code&gt;C++&lt;/code&gt;和&lt;code&gt;Go&lt;/code&gt;的已经都有人报名了
3W 块，项目也不很难，一人足以搞定，以一个 Gem 包的形式估计更好。
有兴趣的 Ruby China 同学可以去试试，我就没法报了，因为我是员工。
发这个贴是我自己觉的不错，并非公司要求，也不敢说为 Rubyist 谋福利，但求这些信息对正有此想法的人有所帮助。&lt;/p&gt;
&lt;h5 id="PS: 第一次在这个Point发帖，如有不妥的地方，还望管理员告知更改，谢谢！"&gt;PS: 第一次在这个 Point 发帖，如有不妥的地方，还望管理员告知更改，谢谢！&lt;/h5&gt;&lt;h4 id="10.22 新增 OpenAPI Ruby语言开发 75,000元，以下是官方新闻："&gt;10.22 新增 OpenAPI Ruby 语言开发 75,000 元，以下是官方新闻：&lt;/h4&gt;
&lt;p&gt;昨天开源中国众包平台正式发布了合作伙伴 —— 阿里云的第一波的 3 个悬赏项目，总金额 10 万（详情），目前三个项目已经结束报名正式进入开发阶段。&lt;/p&gt;

&lt;p&gt;现在第二波 4 个悬赏项目已经发布，总金额超过 30 万，分别是：&lt;/p&gt;

&lt;p&gt;&lt;a href="https://zb.oschina.net/reward/2489933_12399" rel="nofollow" target="_blank" title=""&gt;阿里云开源众包计划 - OpenAPI C++ SDK 开发，80,000 元&lt;/a&gt;
&lt;a href="https://zb.oschina.net/reward/2489933_12398" rel="nofollow" target="_blank" title=""&gt;阿里云开源众包计划 - OpenAPI .Net SDK 开发，75,000 元&lt;/a&gt;
&lt;a href="https://zb.oschina.net/reward/2489933_12397" rel="nofollow" target="_blank" title=""&gt;阿里云开源众包计划 - OpenAPI Go 语言 SDK 开发，75,000 元&lt;/a&gt;
&lt;a href="https://zb.oschina.net/reward/2489933_12396" rel="nofollow" target="_blank" title=""&gt;阿里云开源众包计划 - OpenAPI Ruby 语言 SDK 开发，75,000 元&lt;/a&gt;
有水平有能力的速度报名挑战！！！&lt;/p&gt;

&lt;p&gt;众包平台上线未满两个月，就能吸引包括阿里云在内的一批领军企业的青睐，可见开源中国众包平台走了一条对的道路。希望在接下来的日子里，我们能吸引更多的企业，在众包平台发布更多的优质项目，让更多有实力的开发者，获得更多的回报。&lt;/p&gt;

&lt;p&gt;重要事情说三遍：还有不少项目这几天都会发布出来，请保持关注，请保持关注，请保持关注！&lt;/p&gt;

&lt;p&gt;开源中国众包平台 zb.oschina.net，全心全意为开发者服务。&lt;/p&gt;
&lt;h4 id="以下是官方新闻："&gt;以下是官方新闻：&lt;/h4&gt;
&lt;p&gt;阿里云与开源中国达成战略合作，首期将通过开源中国众包平台发布近百万元悬赏项目。&lt;/p&gt;

&lt;p&gt;此次通过悬赏发布的项目主要是阿里云产品的 SDK 开发包。众所周知，阿里云产品的 SDK 现在只有覆盖了 Java，C 等少数语言，但是流行的开发语言有 11 种，尚未做到”全语言“覆盖。本次悬赏旨在通过有偿的方式（平均一个项目近 3 万～6 万元不等），号召天下开发者完善其他语言版本的 SDK，提升阿里云现有 SDK 版本的开发语言覆盖度，从而帮助阿里云云客户降低使用阿里云产品的门槛。阿里云将通过统一编码风格和对代码质量进行规范。代码验收通过后，会继续在社区上进行开源，继续接受来自社区的开源共享。&lt;/p&gt;

&lt;p&gt;此次悬赏计划涉及几十个不同的项目，为了让开发者第一时间参与项目开发，我们今天先发布了三个已整理好需求的任务，更多的项目需求，正在紧急收集中，将在未来几天内陆续发布：&lt;/p&gt;

&lt;p&gt;&lt;a href="https://zb.oschina.net/reward/2489933_12392" rel="nofollow" target="_blank" title=""&gt;阿里云开源众包计划 - OSS C++ 语言 SDK 开发：￥39,840&lt;/a&gt;
&lt;a href="https://zb.oschina.net/reward/2489933_12391" rel="nofollow" target="_blank" title=""&gt;阿里云开源众包计划 - OSS Ruby 语言 SDK 开发：￥30,000&lt;/a&gt;
&lt;a href="https://zb.oschina.net/reward/2489933_12390" rel="nofollow" target="_blank" title=""&gt;阿里云开源众包计划 - OSS Go 语言 SDK 开发：￥34,920&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;众包平台上线未满两个月，就能吸引包括阿里云在内的一批领军企业的青睐，可见开源中国众包平台走了一条对的道路。希望在接下来的日子里，我们能吸引更多的企业，在众包平台发布更多的优质项目，让更多有实力的开发者，获得更多的回报。&lt;/p&gt;

&lt;p&gt;重要事情说三遍：其他语言和平台的项目这几天都会发布出来，请保持关注，请保持关注，请保持关注！&lt;/p&gt;

&lt;p&gt;开源中国众包平台 &lt;a href="https://zb.oschina.net" rel="nofollow" target="_blank" title=""&gt;zb.oschina.net&lt;/a&gt; ，全心全意为开发者服务。&lt;/p&gt;</description>
      <author>Zoker</author>
      <pubDate>Tue, 20 Oct 2015 11:09:18 +0800</pubDate>
      <link>https://ruby-china.org/topics/27745</link>
      <guid>https://ruby-china.org/topics/27745</guid>
    </item>
    <item>
      <title>为什么很少见有使用 DRuby 开发分布式应用的？</title>
      <description>&lt;p&gt;DRuby 文档少，遇到点问题网上的解决方案也不多，社区也鲜有人提，是性能上的原因，还是说现有的硬件架构解决方案完全足够了？&lt;/p&gt;</description>
      <author>Zoker</author>
      <pubDate>Mon, 06 Jul 2015 19:14:06 +0800</pubDate>
      <link>https://ruby-china.org/topics/26346</link>
      <guid>https://ruby-china.org/topics/26346</guid>
    </item>
    <item>
      <title>rails 使用 redis_store 的同时使用文件缓存</title>
      <description>&lt;p&gt;现在想让部分用户请求的文件缓存，有图片，文本，这些需要通过程序处理才能得到，现在想把他们换存起来减缓系统压力，但是又不想她放到 redis 里面，因为 redis 压力够大了，所以想请问一下各位有没有一种可行的解决办法？&lt;/p&gt;

&lt;p&gt;我们现在的想法是：将第一次处理得到的文件缓存到一个目录，如果下次请求，先检查文件存不存在，不存在那么生成缓存文件，更新规则就是有变动，那么就把缓存文件删了，大家觉得呢？&lt;/p&gt;</description>
      <author>Zoker</author>
      <pubDate>Fri, 24 Oct 2014 19:47:02 +0800</pubDate>
      <link>https://ruby-china.org/topics/22254</link>
      <guid>https://ruby-china.org/topics/22254</guid>
    </item>
    <item>
      <title>有没有一个 Rails 在线文档预览的便捷方案？</title>
      <description>&lt;p&gt;liboffice-&amp;gt;swftools-&amp;gt;flash 加载       这种方式会不会太麻烦了？
有没有什么便捷一点的方案，可以让 pdf，doc，ppt，excel 等在线预览。&lt;/p&gt;</description>
      <author>Zoker</author>
      <pubDate>Thu, 18 Sep 2014 19:10:20 +0800</pubDate>
      <link>https://ruby-china.org/topics/21595</link>
      <guid>https://ruby-china.org/topics/21595</guid>
    </item>
    <item>
      <title>在 Rails 中，通过 API 与其他系统交互，第三方 API 不稳定的情况的处理办法</title>
      <description>&lt;p&gt;如果第三方的 api 不稳定，比如偶尔的一次服务中断，导致请求都没有请求到数据，而且接口又比较多，请问这种情况，该怎么处理接口失效的办法？&lt;/p&gt;</description>
      <author>Zoker</author>
      <pubDate>Thu, 04 Sep 2014 11:21:44 +0800</pubDate>
      <link>https://ruby-china.org/topics/21383</link>
      <guid>https://ruby-china.org/topics/21383</guid>
    </item>
    <item>
      <title>rails 怎么在上传过程中限制文件大小，总不能传完了再去判断吧？</title>
      <description>&lt;p&gt;用的是 carrierwave，不用 js，有什么好办法么？&lt;/p&gt;</description>
      <author>Zoker</author>
      <pubDate>Mon, 18 Aug 2014 11:39:24 +0800</pubDate>
      <link>https://ruby-china.org/topics/21081</link>
      <guid>https://ruby-china.org/topics/21081</guid>
    </item>
    <item>
      <title>关于 rewrite 规则的，不知道怎么写，请教一下各位</title>
      <description>&lt;p&gt;目前有这样的一个网址
&lt;code&gt;https://name.com/username/id/gotopath/&lt;/code&gt;
我想把这个包含用户名和 id 的 https 网址转发到 http 的，只转发 gotopath 这个动作的。也就是转发到
&lt;code&gt;http://name.com/username/id/gotopath/&lt;/code&gt;&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# HTTPS server
    server {
    listen 443;
    server_name name.com;
    rewrite https://name.com/(.*)/(.*)/gotopath/ http://name.com/$1/$2/gotopath/;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;可是貌似不行，请各位指点一下，不胜感激。&lt;/p&gt;</description>
      <author>Zoker</author>
      <pubDate>Wed, 06 Aug 2014 19:55:15 +0800</pubDate>
      <link>https://ruby-china.org/topics/20878</link>
      <guid>https://ruby-china.org/topics/20878</guid>
    </item>
    <item>
      <title>如何在 application_controller 里面指定某个方法只在特定得控制器下执行？</title>
      <description>&lt;p&gt;如 &lt;code&gt;application_controller&lt;/code&gt;里面得一个函数&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def books
……
end
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;我想这个方法只有在响应&lt;code&gt;books_controller&lt;/code&gt;的时候执行，如何做判断？&lt;/p&gt;</description>
      <author>Zoker</author>
      <pubDate>Fri, 09 May 2014 11:28:33 +0800</pubDate>
      <link>https://ruby-china.org/topics/19120</link>
      <guid>https://ruby-china.org/topics/19120</guid>
    </item>
    <item>
      <title>关于数据库设计的疑问，user 是分成 user_info 和 user_profile 还是单独一个表</title>
      <description>&lt;p&gt;最近看到公司数据库发现了这个问题，于是开始纠结其性能上得问题了。&lt;/p&gt;

&lt;p&gt;user 表是分成&lt;code&gt;user_info&lt;/code&gt;（经常访问和操作）和&lt;code&gt;user_profile&lt;/code&gt;（只有在进个人页面才会操作）
还是说全都放到一个&lt;code&gt;users&lt;/code&gt;表里面去？&lt;/p&gt;

&lt;p&gt;对于文章而言是把文章得内容单独放到一个表好，还是全都放到一起好？&lt;/p&gt;

&lt;p&gt;各位走过路过请发表下自己得意见。&lt;/p&gt;</description>
      <author>Zoker</author>
      <pubDate>Thu, 08 May 2014 15:09:50 +0800</pubDate>
      <link>https://ruby-china.org/topics/19102</link>
      <guid>https://ruby-china.org/topics/19102</guid>
    </item>
    <item>
      <title>为什么我都过滤了 new，create，还是能被别人发了垃圾信息？</title>
      <description>&lt;p&gt;先是
&lt;code&gt;before_filter :authorize_post!, only: [:new, :create]&lt;/code&gt;
然后是&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;protected

def authorize_post!
   if @forum.id &amp;lt; 6
      redirect_to posts_url, alert: "此板块不允许发帖"
   elsif DateTime.parse(Time.now.to_s) - DateTime.parse(current_user.created_at.to_s) &amp;lt; 7
      unless Post.where("author_id = #{current_user.id} AND to_days(created_at) = to_days(now()) ").count &amp;lt; 5
        redirect_to posts_url, alert: "未满一周用户每天只能发5篇帖子"
      end
    end
end
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;我自己测试都没有问题，符合条件得都 redirect_to 我定义得地址了，但是为什么还是有人可以无穷无尽的发？&lt;/p&gt;</description>
      <author>Zoker</author>
      <pubDate>Mon, 14 Apr 2014 13:28:51 +0800</pubDate>
      <link>https://ruby-china.org/topics/18589</link>
      <guid>https://ruby-china.org/topics/18589</guid>
    </item>
    <item>
      <title>为什么我这个 jquery 的正则表达式匹配不了呢？</title>
      <description>&lt;p&gt;&lt;code&gt;if(!(/\A[A-Za-z][A-Za-z0-9_\-\. ]*\z/).test(val)){}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;为什么我的这个正则表达式只能匹配到首字母英文字母数字，和下滑线呢？为什么中划线  &lt;code&gt;-&lt;/code&gt;  和英文小数点  &lt;code&gt;.&lt;/code&gt; 匹配不到呢&lt;/p&gt;</description>
      <author>Zoker</author>
      <pubDate>Thu, 27 Mar 2014 11:14:43 +0800</pubDate>
      <link>https://ruby-china.org/topics/18202</link>
      <guid>https://ruby-china.org/topics/18202</guid>
    </item>
  </channel>
</rss>
