<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>lb563 (mixbo)</title>
    <link>https://ruby-china.org/lb563</link>
    <description>技术来源于积累，知识重于分享。</description>
    <language>en-us</language>
    <item>
      <title>关于七牛批量打包接口你或许需要注意的点</title>
      <description>&lt;p&gt;因为项目业务的原因需要实现一批量下载的功能，使用了七牛的多文件打包的接口，但是在使用的过程中遇到好些坑，想写出来给后面需要实现此功能的团队一些提示。&lt;strong&gt;并没有说七牛的服务有什么不好只是有些坑!!!&lt;/strong&gt;。大概是这么一个情况：&lt;/p&gt;
&lt;h3 id="需求："&gt;需求：&lt;/h3&gt;
&lt;p&gt;线上有很多用户的文件上传到七牛，如果用户需要对文件进行下载，那么最直接的就是找到文件的链接进行下载。其次可以把用户选择的文件&lt;strong&gt;url&lt;/strong&gt;写到一个&lt;strong&gt;txt&lt;/strong&gt;文件中，然后让用户下载&lt;strong&gt;txt&lt;/strong&gt;文件，根据&lt;strong&gt;txt&lt;/strong&gt;文件中生成的链接拷贝到任务一个下载链接进行多个文件的下载。还有一个比较理想的功能就是把需要下载的文件选中进行打包下载，最后只提供一个&lt;strong&gt;zip&lt;/strong&gt;包的下载链接。&lt;/p&gt;
&lt;h3 id="技术调研："&gt;技术调研：&lt;/h3&gt;
&lt;p&gt;因为用户所有的文件都放到七牛进行托管，所以很自然的会想到七牛有没有提供类似&lt;strong&gt;批量打包&lt;/strong&gt;的接口。到官方去看了文档找到如下几个接口 &lt;a href="http://developer.qiniu.com/docs/v6/api/reference/fop/mkzip.html" rel="nofollow" target="_blank" title=""&gt;mkzip&lt;/a&gt;, &lt;a href="http://developer.qiniu.com/code/v6/api/dora-api/pfop/pfop.html" rel="nofollow" target="_blank" title=""&gt;pfop&lt;/a&gt;,&lt;a href="http://developer.qiniu.com/code/v6/api/dora-api/pfop/prefop.html" rel="nofollow" target="_blank" title=""&gt;prefop&lt;/a&gt;,&lt;a href="http://developer.qiniu.com/code/v6/sdk/ruby.html#pfop" rel="nofollow" target="_blank" title=""&gt;ruby-sdk&lt;/a&gt;. 根据以上几个文档可以初步得出结论：&lt;strong&gt;七牛支持多文件批量压缩&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id="具体项目中的实现："&gt;具体项目中的实现：&lt;/h3&gt;
&lt;p&gt;根据技术调研的结果我在项目中进行了功能的实现，在实现的过程中有几点我还特别注意。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;七牛最多支持一次打包&lt;strong&gt;3000&lt;/strong&gt;个文件&lt;/li&gt;
&lt;li&gt;七牛对文件进行打包时，链接得进行 base64 编码&lt;/li&gt;
&lt;li&gt;七牛后台启用一个新的队列来处理多文件打包&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;虽然按文档的示例和介绍可以实现多文件打包的功能但是我还是遇到了七牛多文件打包的坑。&lt;/p&gt;
&lt;h3 id="举个栗子："&gt;举个栗子：&lt;/h3&gt;&lt;h4 id="Request Header Fields Too Large"&gt;&lt;strong&gt;Request Header Fields Too Large&lt;/strong&gt;&lt;/h4&gt;&lt;h5 id="表现："&gt;表现：&lt;/h5&gt;
&lt;p&gt;官方文档虽然说一次最多支持&lt;strong&gt;3000&lt;/strong&gt;个文件进行指压缩打包，当我把功能开发完并上线后遇到一些用户因为文件比较多，当我的服务器请求打包时七牛会返回打包失败，其中有一个返回结果（&lt;strong&gt;Request Header Fields Too Large&lt;/strong&gt;）。&lt;/p&gt;
&lt;h5 id="查找原因："&gt;查找原因：&lt;/h5&gt;
&lt;p&gt;按理讲如果返回上面的结果，大多是因为&lt;strong&gt;http 请求头的大小在 2K 以内&lt;/strong&gt;。当然这个是可以根据业务设置其大小，我拿到这个错误和七牛技术进行沟通，客服也很快的回复了我。七牛建议&lt;strong&gt;限制 url 总长度为 2K；不考虑文件个数&lt;/strong&gt;这个是嘛意思？意思就是说官方文档上面说最多支持&lt;strong&gt;3000&lt;/strong&gt;个文件其实是理论上的情况，我不确认他们是怎么得&lt;strong&gt;3000&lt;/strong&gt;个文件的。后来和七牛技术进行沟通，得知七牛在之前实现这部分逻辑时有点技术方案的问题，导致现在七牛接口的多文件打包接口存在一定的限制。&lt;/p&gt;

&lt;p&gt;大致是这样的：因为调用批量打包的接口是一个&lt;strong&gt;post&lt;/strong&gt;请求，而需要打包的文件&lt;strong&gt;url&lt;/strong&gt;是经过编码后拼接成的字符串并放到&lt;strong&gt;post&lt;/strong&gt;的&lt;strong&gt;body&lt;/strong&gt;中，而根据&lt;strong&gt;http&lt;/strong&gt;协议来看&lt;strong&gt;post&lt;/strong&gt;请求带的参数可以比较大至少不是&lt;strong&gt;2k&lt;/strong&gt;，所以遇到&lt;strong&gt;Request Header Fields Too Large&lt;/strong&gt;的可能性比较小。&lt;/p&gt;

&lt;p&gt;通过调用七牛的&lt;strong&gt;mkzip&lt;/strong&gt;接口内部实现可能是这样的：通过接受&lt;strong&gt;post&lt;/strong&gt;到服务器的请求把编码后的文件链接进行解码，然后在内部使用&lt;strong&gt;get&lt;/strong&gt;请求把链接的&lt;strong&gt;url&lt;/strong&gt;放到了&lt;strong&gt;get&lt;/strong&gt;的参数中，如果文件过多就会遇到&lt;strong&gt;Request Header Fields Too Large&lt;/strong&gt;，这个猜想大概是这样的。七牛也在积极的处理这部分的问题，后续会处理掉这个问题，现在只能坐等七牛作修复好这个功能了！&lt;/p&gt;
&lt;h5 id="结论："&gt;结论：&lt;/h5&gt;
&lt;p&gt;1. 在使用第三方接口时一定要对其边界情况进行测试，例如测试其确认最多能支持&lt;strong&gt;3000&lt;/strong&gt;个文件的打包。&lt;/p&gt;

&lt;p&gt;2. 在本地开发时最好写一些测试数据。如果只是自己用手点击几下的话，会很大概率上漏测一些东西&lt;/p&gt;

&lt;p&gt;3. 找到团队中最熟悉此服务的同学询问其联系官方的方式。&lt;/p&gt;

&lt;p&gt;4. 如果同学们都没有联系方式，那一定要把调试的经过和结果或者最好带上中间值整理好一起提工单。&lt;/p&gt;
&lt;h4 id="bad url 错误"&gt;&lt;strong&gt;bad url 错误&lt;/strong&gt;&lt;/h4&gt;&lt;h5 id="表现："&gt;表现：&lt;/h5&gt;
&lt;p&gt;在对七牛私有空间进行文件批量打包时，最是出现&lt;strong&gt;bad url&lt;/strong&gt;&lt;/p&gt;
&lt;h5 id="查找原因"&gt;查找原因&lt;/h5&gt;
&lt;p&gt;之前按七牛官方文档进行测试时，其实是对公共空间进行的测试，但是在线上环境中都是私有的空间，所以当你用公共空间的方式去请求私有的空间时就行不通了&lt;/p&gt;
&lt;h4 id="结论"&gt;结论&lt;/h4&gt;
&lt;p&gt;1. 如果空间为公开空间，即通过&lt;strong&gt;http://域名/文件名称&lt;/strong&gt;，然后通过 base64 安全编码即可拼接在&lt;strong&gt;mkzip&lt;/strong&gt;接口的 &lt;strong&gt;url&lt;/strong&gt; 参数后面进行下载；&lt;/p&gt;

&lt;p&gt;2. 如果是私有空间，不能直接通过 &lt;strong&gt;http://域名/文件名称&lt;/strong&gt; 这样的格式去进行&lt;strong&gt;base64&lt;/strong&gt;安全编码，需要先对其进行设置下载&lt;strong&gt;token&lt;/strong&gt;，然后才能访问和编码，最后拼接 mkzip 接口的 url 参数后面进行下载；&lt;/p&gt;

&lt;p&gt;3.  &lt;strong&gt;https&lt;/strong&gt;协议的&lt;strong&gt;url&lt;/strong&gt; 是不能完成&lt;strong&gt;mkzip&lt;/strong&gt;该接口的&lt;/p&gt;
&lt;h4 id="个人想法"&gt;个人想法&lt;/h4&gt;
&lt;p&gt;1. 七牛做为一个第三方服务提供商应该把文档尽量写的清楚点，也许你们修改了接口的功能并没有修改官方文档这样会给使用你们服务的开发者带来很多不必要的时间成本&lt;/p&gt;

&lt;p&gt;2. 做为开发者使用第三方服务时尽量做做边界测试，例如：最多支持&lt;strong&gt;3000&lt;/strong&gt;个文件上传&lt;/p&gt;

&lt;p&gt;3. 如果遇到使用第三方服务出现技术上的问题，尽可能找到和服务商交流比较及时的途径例如：&lt;strong&gt;QQ&lt;/strong&gt;, 同时也要提工单！&lt;/p&gt;

&lt;p&gt;4. 对于一个功能：从技术调研 -&amp;gt; 功能开发 -&amp;gt; 功能上线  -&amp;gt; 修改 bug -&amp;gt; 发现第三方服务存在局限性 所有这些流程都可以在技术调研时就结束。&lt;/p&gt;</description>
      <author>lb563</author>
      <pubDate>Mon, 09 Jan 2017 22:59:29 +0800</pubDate>
      <link>https://ruby-china.org/topics/32087</link>
      <guid>https://ruby-china.org/topics/32087</guid>
    </item>
    <item>
      <title>“2016年 学 xxxx_是一种什么样的体验” 又来了。</title>
      <description>&lt;p&gt;继 &lt;a href="https://zhuanlan.zhihu.com/p/22782487" rel="nofollow" target="_blank" title=""&gt;在 2016 年学 JavaScript 是一种什么样的体验？&lt;/a&gt;又来一篇 &lt;a href="https://zhuanlan.zhihu.com/p/22886801" rel="nofollow" target="_blank" title=""&gt;在 2016 年做 DevOps 是一种什么样的体验？&lt;/a&gt;&lt;/p&gt;</description>
      <author>lb563</author>
      <pubDate>Thu, 13 Oct 2016 11:10:24 +0800</pubDate>
      <link>https://ruby-china.org/topics/31308</link>
      <guid>https://ruby-china.org/topics/31308</guid>
    </item>
    <item>
      <title>有个弟弟 (头脑还行) 现在高二，想学习软件开发，我想这样给他推荐。</title>
      <description>&lt;p&gt;高二其实主要的重心还是准备高考。&lt;/p&gt;

&lt;p&gt;利用放假和空闲时间可以做以下准备。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;认识电脑（cpu, 内存，大概的工作原理）&lt;/li&gt;
&lt;li&gt;c 语言入门&lt;/li&gt;
&lt;li&gt;比较常见的技术岗位：前端，服务器，app &lt;/li&gt;
&lt;li&gt;现在都有哪些主流的编程语言&lt;/li&gt;
&lt;li&gt;ruby / php / python 任选试一试，做些小东西之类的&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;后面的如果考上大学，即可学习到&lt;code&gt;java&lt;/code&gt;,&lt;code&gt;c++&lt;/code&gt;之类的编辑语言&lt;/p&gt;

&lt;p&gt;想征求大家的意见，这样的计划会不会不适合一个高中学生（凭兴趣学习）&lt;/p&gt;</description>
      <author>lb563</author>
      <pubDate>Fri, 22 Jul 2016 09:46:25 +0800</pubDate>
      <link>https://ruby-china.org/topics/30596</link>
      <guid>https://ruby-china.org/topics/30596</guid>
    </item>
    <item>
      <title>获取两时间差和生活中认为的不一致</title>
      <description>&lt;p&gt;使用&lt;code&gt;time_difference&lt;/code&gt; gem 包来比较两个时间差，在处理两个时间相差多少个月时这样表达&lt;/p&gt;

&lt;p&gt;&lt;code&gt;TimeDifference.between(Time.parse('2015-8-31'), Time.parse("2015-6-30")).in_general&lt;/code&gt; &lt;/p&gt;

&lt;p&gt;输出：&lt;/p&gt;

&lt;p&gt;&lt;code&gt;{:years=&amp;gt;0, :months=&amp;gt;2, :weeks=&amp;gt;0, :days=&amp;gt;2, :hours=&amp;gt;0, :minutes=&amp;gt;0, :seconds=&amp;gt;0}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;对的。你发现了.相差 &lt;code&gt;2个月&lt;/code&gt;  零 &lt;code&gt;2天&lt;/code&gt;  &lt;/p&gt;

&lt;p&gt;回来日常生活中。我们认为 &lt;code&gt;2015-6-30&lt;/code&gt; 和 &lt;code&gt;2015-8-31&lt;/code&gt; 相差&lt;code&gt;2个月&lt;/code&gt; 没有 &lt;code&gt;x天&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;进到源代码中。发现其在算多少个月时 :&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def in_months
    (@time_diff / (1.day * 30.42)).round(2)
  end
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;一个月默认按&lt;strong&gt;&lt;em&gt;30.42&lt;/em&gt;&lt;/strong&gt;天来计算。&lt;/p&gt;

&lt;p&gt;怎么能获取到我们日常生活中认为的时间差呢？&lt;/p&gt;</description>
      <author>lb563</author>
      <pubDate>Thu, 05 Nov 2015 18:14:25 +0800</pubDate>
      <link>https://ruby-china.org/topics/27972</link>
      <guid>https://ruby-china.org/topics/27972</guid>
    </item>
    <item>
      <title>从浏览器访问服务器,出现同一个请求执行二次</title>
      <description>&lt;p&gt;以下是输入日志：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Started GET "/" for 127.0.0.1 at 2015-10-09 20:11:08 +0800
Started GET "/" for 127.0.0.1 at 2015-10-09 20:11:08 +0800
  ActiveRecord::SchemaMigration Load (0.2ms)  SELECT `schema_migrations`.* FROM `schema_migrations`
  ActiveRecord::SchemaMigration Load (0.2ms)  SELECT `schema_migrations`.* FROM `schema_migrations`
  Processing by Portal::HomesController#index as HTML
  Processing by Portal::HomesController#index as HTML
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;google 一下 &lt;a href="https://www.google.com.hk/search?newwindow=1&amp;amp;safe=strict&amp;amp;site=&amp;amp;source=hp&amp;amp;q=rails+request+twice+one+action&amp;amp;btnG=Google+%E6%90%9C%E7%B4%A2&amp;amp;gws_rd=ssl" rel="nofollow" target="_blank" title=""&gt;rails request twice one action&lt;/a&gt; 发现很多个结果，但是都是在说对 js 的加载了两次。&lt;/p&gt;

&lt;p&gt;问题是我没有用到 js 的功能 只是一个简单的请求到 &lt;code&gt;index&lt;/code&gt; action .求解&lt;/p&gt;

&lt;p&gt;--------------------------------分割线---------------------------------------------
application.html.erb 中部分配置：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;%= stylesheet_link_tag 'application', media: 'all' %&amp;gt;
&amp;lt;%= javascript_include_tag 'application' %&amp;gt;
&lt;/code&gt;&lt;/pre&gt;</description>
      <author>lb563</author>
      <pubDate>Fri, 09 Oct 2015 20:52:22 +0800</pubDate>
      <link>https://ruby-china.org/topics/27607</link>
      <guid>https://ruby-china.org/topics/27607</guid>
    </item>
    <item>
      <title>需求都出好了.方案也有了总觉得少一个完美的解决方案</title>
      <description>&lt;p&gt;&lt;strong&gt;需求都出好了。方案也有了总觉得少一个完美的解决方案&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;突然接到一个需求，然后想了一些处理方案。但是总觉得不够完美.遂发帖求经。写完了我的需求和方案后.我觉得是不是可以在社区中：把工作中，或者创业中遇到的需求拆分小块。如果遇到觉得不够好的处理方案.然后发到到社区中 (当然你愿意的话) 这样说不一定别人和你遇到同样的问题。最后找到了比较完美的方案 (如果他愿意分享).提问的同学便又获得了新的技能。但是前提是要有自己的解决方案.大学觉得怎么样？下面是新鲜出炉的需求&lt;/p&gt;
&lt;h3 id="需求描述"&gt;需求描述&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;www.A.com&lt;/code&gt; &lt;code&gt;www.B.cn&lt;/code&gt; &lt;code&gt;www.C.io&lt;/code&gt; &lt;code&gt;www.D.com&lt;/code&gt;  ....
web 实例根据以上的域名来的请求，分别显示不同的数据给客户端。从而达到多域名单实例的结构&lt;/p&gt;
&lt;h4 id="运行环境"&gt;运行环境&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;Apache2 + Rails + Ubuntu&lt;/code&gt;&lt;/p&gt;
&lt;h3 id="实现方案"&gt;实现方案&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;要想以上多个域名都指向同一个 rails 实例，可以实现添加&lt;code&gt;Virtual Host&lt;/code&gt; 的方法。但是这样不灵活.每添加或者减少都要重启 apache2 &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;有没有方法动态的添加或者修改减少域名，但是不用重启 apach2 服务.
有！我想到可以在 apache.conf 文件中添加 &lt;code&gt;Include /opt/apps/sites_enable&lt;/code&gt; 然后在 rails 中实现可以自动添加或者减少域名数据的功能。当添加一个域名时对应生成一个 apache 的&lt;code&gt;Virtual Host&lt;/code&gt;的配置文件。放到&lt;code&gt;/opt/apps/sites_enable&lt;/code&gt;中，这样 apache 就能动态的读取到配置文件。&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;我相信你们也许会遇到和我一样的问题。我是这样处理的.不知道你们有没有好的方案可以实现上面的需求呢？&lt;/p&gt;</description>
      <author>lb563</author>
      <pubDate>Fri, 26 Jun 2015 16:40:00 +0800</pubDate>
      <link>https://ruby-china.org/topics/26199</link>
      <guid>https://ruby-china.org/topics/26199</guid>
    </item>
    <item>
      <title>海量编程干货资源索引</title>
      <description>&lt;p&gt;A curated list of awesome lists &lt;a href="https://github.com/sindresorhus/awesome" rel="nofollow" target="_blank" title=""&gt;各取所需吧&lt;/a&gt;&lt;/p&gt;</description>
      <author>lb563</author>
      <pubDate>Mon, 18 May 2015 13:08:15 +0800</pubDate>
      <link>https://ruby-china.org/topics/25618</link>
      <guid>https://ruby-china.org/topics/25618</guid>
    </item>
    <item>
      <title>GitHub 上整理的一些工具</title>
      <description>&lt;p&gt;发现一好东西，有需自取：&lt;a href="http://segmentfault.com/q/1010000002404545" rel="nofollow" target="_blank" title=""&gt;GitHub 上整理的一些工具&lt;/a&gt;&lt;/p&gt;</description>
      <author>lb563</author>
      <pubDate>Tue, 23 Dec 2014 22:56:52 +0800</pubDate>
      <link>https://ruby-china.org/topics/23366</link>
      <guid>https://ruby-china.org/topics/23366</guid>
    </item>
    <item>
      <title>好东西自取</title>
      <description>&lt;p&gt;RT:&lt;/p&gt;

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

&lt;p&gt;收集了很多对程序员友好的资源&lt;/p&gt;</description>
      <author>lb563</author>
      <pubDate>Thu, 27 Nov 2014 08:31:12 +0800</pubDate>
      <link>https://ruby-china.org/topics/22888</link>
      <guid>https://ruby-china.org/topics/22888</guid>
    </item>
    <item>
      <title>一个方便调试的代理工具</title>
      <description>&lt;p&gt;发现很有用啊 &lt;a href="https://ngrok.com" rel="nofollow" target="_blank" title=""&gt;ngrok&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;我的使用情景：在腾讯开发平台调试接口需要将自己的 web 放到公网服务器，但是在公网上又不方便调试.
现在用这个工具基本上可以生成一个对外 url 然后在本地开发机上调试接口什么的很方便。&lt;/p&gt;</description>
      <author>lb563</author>
      <pubDate>Thu, 23 Oct 2014 08:35:50 +0800</pubDate>
      <link>https://ruby-china.org/topics/22206</link>
      <guid>https://ruby-china.org/topics/22206</guid>
    </item>
    <item>
      <title>大神级贪吃蛇你能玩到哪?</title>
      <description>&lt;p&gt;上图：&lt;/p&gt;

&lt;p&gt;&lt;img src="//l.ruby-china.com/photo/2014/9ecbb7dc7cb2c2f3a90ad25122ba399d.gif" title="" alt=""&gt;&lt;/p&gt;</description>
      <author>lb563</author>
      <pubDate>Fri, 16 May 2014 22:26:49 +0800</pubDate>
      <link>https://ruby-china.org/topics/19314</link>
      <guid>https://ruby-china.org/topics/19314</guid>
    </item>
    <item>
      <title>快速搭建 Gitosis 服务器望指点.?</title>
      <description>&lt;p&gt;在新的 Centos 机器上做一个 Gitosis 服务器。.搭建失败，不确实配置端口问题。&lt;/p&gt;
&lt;h3 id="初始化工作"&gt;初始化工作&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;安装&lt;code&gt;Gitosis&lt;/code&gt;脚本&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;新建 git 用户并在目录下生成 &lt;code&gt;gitosis&lt;/code&gt; 和 &lt;code&gt;repositories&lt;/code&gt; 两个目录。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;git clone git@10.207.137.222:gitosis-admin.git&lt;/code&gt; # 10.207.137.222 内网 ip 且和&lt;code&gt;Gitosis&lt;/code&gt;在一台机器上。&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id="遇到的问题"&gt;遇到的问题&lt;/h4&gt;
&lt;p&gt;前两步都没有问题，问题在第三步。执行结果后输出&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Initialized empty Git repository in /tmp/gitosis-admin/.git/
Connection closed by 10.207.137.222
fatal: The remote end hung up unexpectedly
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;以下是&lt;code&gt;/etc/ssh/ssh_config&lt;/code&gt;的配置信息&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#Host *
#   ForwardAgent  yes
#   ForwardX11 no
#   RhostsRSAAuthentication no
#   RSAAuthentication yes
#   PasswordAuthentication yes
#   HostbasedAuthentication no
#   GSSAPIAuthentication no
#   GSSAPIDelegateCredentials no
#   GSSAPIKeyExchange no
#   GSSAPITrustDNS no
#   BatchMode no
#   CheckHostIP yes
#   AddressFamily any
#   ConnectTimeout 0
#   StrictHostKeyChecking ask
#   IdentityFile ~/.ssh/identity
#   IdentityFile ~/.ssh/id_rsa
#   IdentityFile ~/.ssh/id_dsa
    Port 36000
#   Protocol 2,1
#   Cipher 3des
#   Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc
#   MACs hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160
#   EscapeChar ~
#   Tunnel no
#   TunnelDevice any:any
#   PermitLocalCommand no
#   VisualHostKey no
Host *
        GSSAPIAuthentication yes
# If this option is set to yes then remote X11 clients will have full access
# to the original X11 display. As virtually no X11 client supports the untrusted
# mode correctly we set this to yes.
        ForwardX11Trusted yes
# Send locale-related environment variables
        SendEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES 
        SendEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT 
        SendEnv LC_IDENTIFICATION LC_ALL LANGUAGE
        SendEnv XMODIFIERS
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;端口起在 36000 上。是不是还有一些其它配置没有做好。&lt;/p&gt;

&lt;p&gt;需要怎么配置才能让 git clone 成功。&lt;/p&gt;
&lt;h4 id="Google 尝试"&gt;Google 尝试&lt;/h4&gt;
&lt;p&gt;&lt;a href="http://stackoverflow.com/questions/5767850/git-on-custom-ssh-port" rel="nofollow" target="_blank"&gt;http://stackoverflow.com/questions/5767850/git-on-custom-ssh-port&lt;/a&gt; # 没有成功&lt;/p&gt;

&lt;p&gt;&lt;a href="http://stackoverflow.com/questions/3596260/git-remote-add-with-other-ssh-port" rel="nofollow" target="_blank"&gt;http://stackoverflow.com/questions/3596260/git-remote-add-with-other-ssh-port&lt;/a&gt; # 没有成功&lt;/p&gt;

&lt;p&gt;&lt;a href="http://serverfault.com/questions/218256/specify-ssh-port-for-git" rel="nofollow" target="_blank"&gt;http://serverfault.com/questions/218256/specify-ssh-port-for-git&lt;/a&gt; #也没有成功&lt;/p&gt;</description>
      <author>lb563</author>
      <pubDate>Sat, 19 Apr 2014 19:12:02 +0800</pubDate>
      <link>https://ruby-china.org/topics/18714</link>
      <guid>https://ruby-china.org/topics/18714</guid>
    </item>
    <item>
      <title>[北京] 垂直 O2O 电商团队招募全栈选手月薪 15k+ (内附白富美 CEO 靓照)</title>
      <description>&lt;p&gt;&lt;img src="//l.ruby-china.com/photo/2014/fd21004e09f5f2a64aa48ec4e2f83018.jpg" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;(代朋友发，简历发到 janckerchen(at)gmail.com)&lt;/p&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;中介费用高&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;li&gt;......&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;包租婆团队由资深空间设计师组成，在会展行业 10 年历练，为大型国际会展提供高端设计，如今拥抱互联网，把时尚设计带到年轻人的居家环境，效仿国际都市生活方式，打造全新的租住体验。&lt;/p&gt;

&lt;p&gt;目前项目资金到位，传统行业部分已经启动，开始组建技术团队，寻找一位掌握全栈互联网技术，崇尚敏捷开发的技术负责人。各位，电商概念，不要求技术深度，别被吓到，不一定非要技术大牛。因为非常重视用户体验和时尚设计，因此你最好是全栈选手，软件开发的分割，就意味着体验的人性化丧失。&lt;/p&gt;

&lt;p&gt;虽然全栈已明，考虑到刚刚投身社区的学弟学妹，再啰嗦一下全栈选手的技术参数&lt;/p&gt;

&lt;p&gt;以下以 ruby 系为例 (这里毕竟是 ruby 社区，其他 python 系，nodejs 系，php 系，.net 系都欢迎，搞定问题就行)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;os: centos/ubuntu&lt;/li&gt;
&lt;li&gt;脚本语言 ruby, shell&lt;/li&gt;
&lt;li&gt;Web 服务器 nginx&lt;/li&gt;
&lt;li&gt;Web 架构 rails&lt;/li&gt;
&lt;li&gt;数据库 mysql, nosql&lt;/li&gt;
&lt;li&gt;缓存 memcache&lt;/li&gt;
&lt;li&gt;消息队列&lt;/li&gt;
&lt;li&gt;Javacript, jquery 或 angularjs&lt;/li&gt;
&lt;li&gt;CSS, 响应式跨平台跨浏览器&lt;/li&gt;
&lt;li&gt;HTML 这个...算一项吗？&lt;/li&gt;
&lt;li&gt;简单的 ps 操作，比如取个色值，转个格式啥的，还有...前台工程师总有一些酷酷的工具&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;职位信息&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;工作地点：北京，位于四惠地铁旁&lt;/li&gt;
&lt;li&gt;职位：技术团队负责人，稳定后会扩充到 3 人&lt;/li&gt;
&lt;li&gt;薪资：15k+, 五险&lt;/li&gt;
&lt;li&gt;近期工作内容：www 端负责建设电商网和内部工作流; 移动端先采用 html 对接微信账号&lt;/li&gt;
&lt;li&gt;简历发到：janckerchen(at)gmail.com &lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="常见问题"&gt;常见问题&lt;/h2&gt;&lt;h2 id="这是传统行业吗? 技术团队有没有地位?"&gt;这是传统行业吗？技术团队有没有地位？&lt;/h2&gt;
&lt;p&gt;典型的 O2O 项目，整个商业模式围绕互联网全新打造的，不是把传统业务搬到网上，技术平台是核心能力。传统行业不是用来颠覆的吗？&lt;/p&gt;
&lt;h2 id="有技术大拿带队吗? 我刚毕业想学习一下"&gt;有技术大拿带队吗？我刚毕业想学习一下&lt;/h2&gt;
&lt;p&gt;抱歉，没有。正是需要你来填空的。"全栈"更多代表了知识面和学习能力，并非一定深黑大拿。相对技术深度，你的性格更容易帮助你成功，乐观积极，内心强大，独立思考，乐于攻关，不断学习，更容易胜任。&lt;/p&gt;
&lt;h2 id="这是CTO职位吗?"&gt;这是 CTO 职位吗？&lt;/h2&gt;
&lt;p&gt;严格说不是，目前阶段还不适合招聘管理型的人才，更适合美国大兵式战斗单位。应该是 TeamLeader,  希望能成长为 CTO.&lt;/p&gt;
&lt;h2 id="薪资还能再给力点儿吗?"&gt;薪资还能再给力点儿吗？&lt;/h2&gt;
&lt;p&gt;公开就是 15k+, 再高就有点土豪味了。具体还是要面谈才行，也许碰撞出一些火花，彼此冲动也说不定。有一点值得注意，只有在这种互补性很强的团队，才能真正兑现你多年积累的十八般武艺。&lt;/p&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;
&lt;h2 id="我怎么知道项目是否靠谱?"&gt;我怎么知道项目是否靠谱？&lt;/h2&gt;
&lt;p&gt;如果你工作稳定，东张西望，说明你心态上还没有做好准备，就别问那么多了。如果你正在寻找新的机会，想换个地方伸展手脚，我建议你迈出一步，可以先尝试 3 个月，自己实地评估，不合适拿了薪水再找。&lt;/p&gt;
&lt;h2 id="究竟做啥东西?"&gt;究竟做啥东西？&lt;/h2&gt;
&lt;p&gt;产品概念如下，不方便和盘推出，为表诚意，小图你们感受一下！&lt;/p&gt;

&lt;p&gt;&lt;img src="//l.ruby-china.com/photo/2014/c31014a566dd38e0e630a1f9c5e01cac.jpg" title="" alt=""&gt; &lt;img src="//l.ruby-china.com/photo/2014/ce21e0bb034339bb93316b9651202003.jpg" title="" alt=""&gt;&lt;/p&gt;
&lt;h2 id="最后发福利啦"&gt;最后发福利啦&lt;/h2&gt;
&lt;p&gt;美女包租婆照片，不是标题党，童叟无欺，还不满意的移步微博 &lt;a href="http://weibo.com/guoyishanshan" rel="nofollow" target="_blank"&gt;http://weibo.com/guoyishanshan&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="//l.ruby-china.com/photo/2014/16054371de74cd0524705efa348bbd71.jpg" title="" alt=""&gt;&lt;img src="//l.ruby-china.com/photo/2014/01c2c6add0ef187f84a3cfd53e976cc8.jpeg" title="" alt=""&gt;&lt;/p&gt;
&lt;h2 id="怎么联系?"&gt;怎么联系？&lt;/h2&gt;
&lt;p&gt;ok, 轮到你了，简历发到 janckerchen(at)gmail.com,  说说我们为什么选择你 &lt;img title=":smile:" alt="😄" src="https://twemoji.ruby-china.com/2/svg/1f604.svg" class="twemoji"&gt;&lt;/p&gt;</description>
      <author>lb563</author>
      <pubDate>Mon, 14 Apr 2014 23:37:35 +0800</pubDate>
      <link>https://ruby-china.org/topics/18602</link>
      <guid>https://ruby-china.org/topics/18602</guid>
    </item>
    <item>
      <title>有那些比较好的方式在 rails 中实现提示用户的功能</title>
      <description>&lt;p&gt;在后台完成逻辑后，想要提示用户。但是并不想刷新页面.想在 action 中调用 js 弹窗提示。&lt;/p&gt;

&lt;p&gt;有哪些比较那的框架或者方案可选择呢？&lt;/p&gt;</description>
      <author>lb563</author>
      <pubDate>Mon, 03 Mar 2014 00:00:58 +0800</pubDate>
      <link>https://ruby-china.org/topics/17616</link>
      <guid>https://ruby-china.org/topics/17616</guid>
    </item>
    <item>
      <title>大家帮忙看看这个帖子.</title>
      <description>&lt;p&gt;帖子链接：&lt;a href="http://stackoverflow.com/questions/21808855/not-find-gems-in-gem-default-directory-but-i-installed-it" rel="nofollow" target="_blank"&gt;http://stackoverflow.com/questions/21808855/not-find-gems-in-gem-default-directory-but-i-installed-it&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;写这个帖子写的有点久。希望能得到大家的帮助.因为太奇怪的问题.google 了许久也没有找到想要的答案。&lt;/p&gt;</description>
      <author>lb563</author>
      <pubDate>Sun, 16 Feb 2014 16:27:57 +0800</pubDate>
      <link>https://ruby-china.org/topics/17290</link>
      <guid>https://ruby-china.org/topics/17290</guid>
    </item>
    <item>
      <title>Bundle 慎用  `bundle clean --force` </title>
      <description>&lt;p&gt;昨天在使用 bundle 的时候 使用了命令：&lt;code&gt;bundle clean --force&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;只见输出: &lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Remove Gem activerecord
Remove Gem xxx
Remove Gem xxx
Remove Gem xxx
Remove Gem xxx
Remove Gem xxx

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;果断&lt;code&gt;ctrl + c&lt;/code&gt; 程序结束后。回到项目中 &lt;code&gt;rake -T&lt;/code&gt; 输出：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;lioooo:deploy lioooo$ rake -T
rake aborted!
cannot load such file -- active_record/deprecated_finders

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;查看 Gemfile 依赖的 gem 包：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;source "http://ruby.taobao.org"

gem "colored", "1.2"
gem "activerecord", "3.2.3"
gem "logging", "1.8.1"
gem "pry", "0.9.10"
gem "capistrano", "2.9.0"
gem "capistrano_colors", "0.5.5"
gem "capistrano-ext", "1.2.1"
gem "rake-hooks", "1.2.3" #rake callback gems

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;再次回到项目根目录执行命令：&lt;code&gt;bundle install&lt;/code&gt; 输出：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Using rake (10.0.3)
Using i18n (0.6.4)
Using multi_json (1.7.2)
Using activesupport (3.2.3)
Using builder (3.0.4)
Using activemodel (3.2.3)
Using arel (3.0.2)
Using tzinfo (0.3.37)
Using activerecord (3.2.3)
Using highline (1.6.15)
Using net-ssh (2.6.3)
Using net-scp (1.0.4)
Using net-sftp (2.0.5)
Using net-ssh-gateway (1.1.0)
Using capistrano (2.9.0)
Using capistrano-ext (1.2.1)
Using capistrano_colors (0.5.5)
Using coderay (1.0.9)
Using colored (1.2)
Using little-plugger (1.1.3)
Using logging (1.8.1)
Using method_source (0.8.1)
Using slop (3.3.3)
Using pry (0.9.10)
Using rake-hooks (1.2.3)
Using bundler (1.3.5)
Your bundle is complete!
Use `bundle show [gemname]` to see where a bundled gem is installed.

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;结束后执行命令 &lt;code&gt;rake -T&lt;/code&gt; 输出：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;lioooo:deploy lioooo$ rake -T
rake aborted!
cannot load such file -- active_record/deprecated_finders

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;同样的错误 !!!!!!!!!&lt;/p&gt;

&lt;p&gt;执行命令 &lt;code&gt;bundle show activerecord&lt;/code&gt; 输出&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;The gem activerecord has been deleted. It was installed at:
/usr/local/Cellar/ruby/1.9.3-p125/lib/ruby/gems/1.9.1/gems/activerecord-3.2.3

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;提示 &lt;code&gt;activerecord-3.2.3&lt;/code&gt; 已经被删除。果然 &lt;code&gt;gem list activerecord&lt;/code&gt; 结果输出：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;gem list activerecord

*** LOCAL GEMS ***

activerecord (4.0.2, 3.2.16, 3.2.14, 3.2.11, 3.2.8, 3.2.3, 3.2.2, 3.2.1, 3.2.0, 3.0.10, 2.3.11, 2.3.8)

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;于是奇怪的问题就出现了：&lt;code&gt;bundle&lt;/code&gt; 提示 &lt;code&gt;activerecord-3.2.3&lt;/code&gt; 已经被删除，但是&lt;code&gt;gem list&lt;/code&gt; 却能找到该版本的&lt;code&gt;activerecord&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;难道 gem list 有什么缓存信息？gem list 是列举出系统 gem env 目录中所有安装的 gem.&lt;/p&gt;

&lt;p&gt;这个时候我需要做什么来挽救当前环境呢？&lt;/p&gt;</description>
      <author>lb563</author>
      <pubDate>Fri, 14 Feb 2014 10:52:02 +0800</pubDate>
      <link>https://ruby-china.org/topics/17247</link>
      <guid>https://ruby-china.org/topics/17247</guid>
    </item>
    <item>
      <title>能否在 Rake 脚本中改变 shell 环境中的当前路径?</title>
      <description>&lt;p&gt;例如有一 Rake 脚本：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;task :cd_dir do 
    cmd = "cd /tmp"
    puts cmd
    system cmd
end

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;在命令行中执行：&lt;code&gt;rake cd_dir &amp;amp;&amp;amp; pwd&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;以下为输出：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd /tmp  #想要cd /tmp 目录中去
/lioooo/script # 当前脚本的目录
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;从以上的输出结果来看：&lt;/p&gt;

&lt;p&gt;1: 脚本的原意想把 shell 环境中的当前路径修改成 &lt;code&gt;/tmp&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;2: 执行脚本后 shell 的当前路径并没有 &lt;code&gt;cd&lt;/code&gt; 到 &lt;code&gt;/tmp&lt;/code&gt; 仍然是 (&lt;code&gt;pwd&lt;/code&gt;) &lt;code&gt;/lioooo/script&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;想问一下有没有方法使用 Rake 脚本来修改 shell 当前路径？&lt;/p&gt;</description>
      <author>lb563</author>
      <pubDate>Wed, 12 Feb 2014 22:03:39 +0800</pubDate>
      <link>https://ruby-china.org/topics/17209</link>
      <guid>https://ruby-china.org/topics/17209</guid>
    </item>
    <item>
      <title>项目多版本开发,更新数据库结构时的优美方案.</title>
      <description>&lt;p&gt;项目数据库分多个版本：&lt;/p&gt;

&lt;p&gt;&lt;code&gt;dev&lt;/code&gt; 用于开发环境&lt;/p&gt;

&lt;p&gt;&lt;code&gt;lab&lt;/code&gt; 用于外网测试环境&lt;/p&gt;

&lt;p&gt;&lt;code&gt;release&lt;/code&gt; 用于外网正式生产环境&lt;/p&gt;

&lt;p&gt;因为开发的需要会对数据库进行表结构的修改 (例如：加表，删表，添加表字段，重命名表名名，重命名表字段名) ,于时很自然的就想到  &lt;code&gt;Migration&lt;/code&gt; 机制 .&lt;/p&gt;

&lt;p&gt;在实际运行的过程中会遇到如下的情况：&lt;/p&gt;

&lt;p&gt;1: &lt;code&gt;dev&lt;/code&gt; 的数据库结构发生变化后，此时需要更新到&lt;code&gt;lab&lt;/code&gt;测试环境中。但要求不影响现有的&lt;code&gt;release&lt;/code&gt;版本.
于是新建一个 migration 文件，需要把表&lt;code&gt;table1&lt;/code&gt;中的字段&lt;code&gt;filed1&lt;/code&gt;重命名为&lt;code&gt;filed2&lt;/code&gt;.此文件的命名类似 &lt;code&gt;201405060512_xxxx.rb&lt;/code&gt;. 执行此 migration 并让其在 &lt;code&gt;lab&lt;/code&gt; 版本的数据库中生效，到此&lt;code&gt;lab&lt;/code&gt;的数据库结构已经更新到最新版本并可交由外网测试。&lt;/p&gt;

&lt;p&gt;2:  这个时候&lt;code&gt;release&lt;/code&gt; 版本发现一个重大 bug，需要把表&lt;code&gt;table1&lt;/code&gt;中的&lt;code&gt;filed1&lt;/code&gt;的值设置成一固定值&lt;code&gt;300&lt;/code&gt;.这个必须 fix 它。于是开发人员都切到 &lt;code&gt;release&lt;/code&gt; 版本中进行修改。最后生成一个 migrate 文件类似&lt;code&gt;201405080512_xxxx.rb&lt;/code&gt;用于对&lt;code&gt;release&lt;/code&gt;版本的数据库进行升级。但是这个时候并不需要升级&lt;code&gt;lab&lt;/code&gt;版本的数据库。&lt;/p&gt;

&lt;p&gt;3:最后到了一个开发周期，需要发布一个全新版本到外网测试。这个时候的流程大概会是这样的：&lt;/p&gt;

&lt;p&gt;1) 把&lt;code&gt;release&lt;/code&gt;版本的修改合并到&lt;code&gt;lab&lt;/code&gt;分支上。&lt;/p&gt;

&lt;p&gt;2) 把&lt;code&gt;lab&lt;/code&gt;分支合并到&lt;code&gt;dev&lt;/code&gt;分支上。&lt;/p&gt;

&lt;p&gt;3) 本地测试&lt;code&gt;dev&lt;/code&gt;分支 直到 ok&lt;/p&gt;

&lt;p&gt;4) &lt;code&gt;dev&lt;/code&gt; 分支合并到 &lt;code&gt;lab&lt;/code&gt; 分支并把&lt;code&gt;lab&lt;/code&gt;发布到外网进行测试。&lt;/p&gt;

&lt;p&gt;5) 执行数据库升级脚本 (Migration)&lt;/p&gt;

&lt;p&gt;看似这一切都很通畅，但是这里面就会有一个问题。&lt;code&gt;release&lt;/code&gt; 分支的 migrate 文件 &lt;code&gt;201405080512_xxxx.rb&lt;/code&gt; 的生成时间后于 &lt;code&gt;lab&lt;/code&gt; 分支的 migrate 文件 &lt;code&gt;201405060512_xxxx.rb&lt;/code&gt; 一天。在合并分支的时候虽然没有冲突，但是在下一次执行顺序上就会出现问题，回到刚在的 bug 中：&lt;/p&gt;

&lt;p&gt;&lt;code&gt;release&lt;/code&gt; 后于&lt;code&gt;lab&lt;/code&gt; 如果按 &lt;code&gt;Migration&lt;/code&gt; 的机制会先执行 &lt;code&gt;lab&lt;/code&gt; 分支建的 migration 文件即是：将&lt;code&gt;table1&lt;/code&gt;中的&lt;code&gt;filed1&lt;/code&gt;重新命名为&lt;code&gt;filed2&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;然后执行&lt;code&gt;release&lt;/code&gt;分支的 &lt;code&gt;Migration&lt;/code&gt; 即是：将&lt;code&gt;table1&lt;/code&gt;中的&lt;code&gt;filed1&lt;/code&gt;的数值设置成固定的数&lt;code&gt;300&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;问题就在当执行&lt;code&gt;release&lt;/code&gt;分支的时候找不到&lt;code&gt;table1&lt;/code&gt;中的&lt;code&gt;filed1&lt;/code&gt;字段，因为被前一个 migration 给修改成了&lt;code&gt;filed2&lt;/code&gt;
程序抛出一个异常。&lt;/p&gt;

&lt;p&gt;当然以上情况可以手动人为解决冲突，并可保证其运行。但是总感觉还有比较好的方案来处理这种情况.google 后一时又找不到好的解决方案。于是准备向&lt;code&gt;ruby-china&lt;/code&gt; 求助。&lt;/p&gt;

&lt;p&gt;上面的问题只是部分想到的冲突的情况，估计还会有很多类似或者其它冲突.
所以希望各位大牛们能出点主意。或者有什么比较好的处理类似情况的方案。&lt;/p&gt;</description>
      <author>lb563</author>
      <pubDate>Wed, 08 Jan 2014 15:16:50 +0800</pubDate>
      <link>https://ruby-china.org/topics/16694</link>
      <guid>https://ruby-china.org/topics/16694</guid>
    </item>
    <item>
      <title>酷炫的工具集锦</title>
      <description>&lt;p&gt;&lt;a href="https://github.com/hzlzh/Best-App" rel="nofollow" target="_blank"&gt;https://github.com/hzlzh/Best-App&lt;/a&gt;&lt;/p&gt;</description>
      <author>lb563</author>
      <pubDate>Sat, 28 Dec 2013 22:24:25 +0800</pubDate>
      <link>https://ruby-china.org/topics/16482</link>
      <guid>https://ruby-china.org/topics/16482</guid>
    </item>
    <item>
      <title>Rails 在调用其它项目的 Rake 命令会不出现失败?</title>
      <description>&lt;p&gt;Rails 项目需要自动去执行另外一个项目的 rake 命令.
例如：&lt;code&gt;cd /data/home/app/utils/backup_db &amp;amp;&amp;amp; bundle exec rake backup:db day=2013.12.02&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;每次通过 Rails 的 Controller 来执行这个 shell 命令时会失败 (没有成功执行该脚本的代码).但是手动执行这个语句时会执行成功。&lt;/p&gt;

&lt;p&gt;我当是猜想是和 shell 的环境有有关系于是尝试:
 &lt;code&gt;source ~/.bash_profile &amp;amp;&amp;amp; cd /data/home/app/utils/backup_db &amp;amp;&amp;amp; bundle exec rake backup:db day=2013.12.02&lt;/code&gt;
&lt;code&gt;~/.bash_profile&lt;/code&gt; 里面设置所需要的环境变量例如：Ruby 的环境什么的。&lt;/p&gt;

&lt;p&gt;但是这样设置后执行也没有成功。希望各位大神帮忙出出主意，指点一下。&lt;/p&gt;</description>
      <author>lb563</author>
      <pubDate>Wed, 04 Dec 2013 00:44:25 +0800</pubDate>
      <link>https://ruby-china.org/topics/15978</link>
      <guid>https://ruby-china.org/topics/15978</guid>
    </item>
  </channel>
</rss>
