<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>yutian (goruby)</title>
    <link>https://ruby-china.org/yutian</link>
    <description>办法总比问题多！</description>
    <language>en-us</language>
    <item>
      <title>在文章中插入视频，浏览文章的时候如何实现视频播放？</title>
      <description>&lt;p&gt;使用富文本编辑器编写博客使用&lt;a href="/macrow" class="user-mention" title="@macrow"&gt;&lt;i&gt;@&lt;/i&gt;macrow&lt;/a&gt; 的 &lt;a href="https://github.com/Macrow/rails_kindeditor" rel="nofollow" target="_blank" title=""&gt;rails_kindeditor&lt;/a&gt;，目前可正常保存文章样式和图片等内容，遇到的问题是：文章显示页面上传的视频却无法播放。
查看源码发现视频用的是 embed 方式植入在 body 中，但是文章展示页面文字部分可正常显示，视频部分变为空白无法播放，查看源码如下：&lt;/p&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;embed&lt;/span&gt; &lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/uploads/flash/201409/3a5085aafb30.flv&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;application/x-shockwave-flash&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;width&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;550&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;height&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;400&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;quality&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;high&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;找到了一篇解决 kindeditor 上传 flv 不能播放的文章  &lt;a href="http://webdev.brunoxu.com/archives/1248.html" rel="nofollow" target="_blank"&gt;http://webdev.brunoxu.com/archives/1248.html&lt;/a&gt; 经过多次次尝试还不大清楚如何实现播放，请教教社区里面的朋友，希望能够提供一些建议，谢谢！&lt;/p&gt;</description>
      <author>yutian</author>
      <pubDate>Wed, 10 Sep 2014 16:43:24 +0800</pubDate>
      <link>https://ruby-china.org/topics/21457</link>
      <guid>https://ruby-china.org/topics/21457</guid>
    </item>
    <item>
      <title>Git 如何实现两个仓库之间进行同步</title>
      <description>&lt;p&gt;如题：一个项目分别提交到两台不同的服务器上，如何实现两个仓库之间的同步？
比如 A 仓库项目克隆地址：git@58.32.19.255/user/a.git
          B 仓库项目克隆地址：git@110.96.1.2 /user/a.git
怎么设置才能实现项目提交后两个仓库之间能够自动同步&lt;/p&gt;</description>
      <author>yutian</author>
      <pubDate>Mon, 01 Sep 2014 13:21:33 +0800</pubDate>
      <link>https://ruby-china.org/topics/21322</link>
      <guid>https://ruby-china.org/topics/21322</guid>
    </item>
    <item>
      <title>批量数据该怎么处理才能减少耗时 (如何用 EventMachine 发送多 http 请求)</title>
      <description>&lt;p&gt;要处理业务系统一张表里面的数据，需要把每一个记录都遍历一次才能任务 job，大概有 10w 数据，通过前台发送一个请求后台使用 find_in_batches 来处理，因为 job 任务处理有些耗时，处理这些数据的时候服务器不能接受其他请求，想把任务转为后台处理，看到网上有说线程，也有说用进程的，试了试 sidekiq 但是效果好些没有什么改进，就采用下面的方法：但是任务处理的很慢&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="no"&gt;User&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find_in_batches&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:batch_size&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;2000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;users&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
  &lt;span class="nb"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="n"&gt;users&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;each&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
    &lt;span class="n"&gt;job&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;usreport&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;请教各位改怎么改进才能让任务转为后台处理或者加快处理？thx！
后来觉得没有必要采用 sidekiq，现在想只用 rack 来完成。&lt;/p&gt;

&lt;p&gt;追问：（附 job 主要完成的任务）
（1）判断数据库每个记录对应的两个文件 pdf 和 png 是否存在
（2）如果不存在要调用 Http 请求去生成对应的文件，并且必须有 pdf 才能生成 png&lt;/p&gt;

&lt;p&gt;为了完成上面的任务，（经过&lt;a href="/nickcen" class="user-mention" title="@nickcen"&gt;&lt;i&gt;@&lt;/i&gt;nickcen&lt;/a&gt;  &lt;a href="/mystery" class="user-mention" title="@mystery"&gt;&lt;i&gt;@&lt;/i&gt;mystery&lt;/a&gt; 
&lt;a href="/martin" class="user-mention" title="@martin"&gt;&lt;i&gt;@&lt;/i&gt;martin&lt;/a&gt;  &lt;a href="/liwei78" class="user-mention" title="@liwei78"&gt;&lt;i&gt;@&lt;/i&gt;liwei78&lt;/a&gt;
的指导）首先采用 rack 任务，把文件不存在的查找一遍，并且标记文件文件是否存在（大概 500s 完成）。
之后再去遍历这个记录表，根据文件查找结果记录去请求 url 生成 pdf 和 png；&lt;/p&gt;

&lt;p&gt;目前遇到的问题：
每次发送 Http 请求需要等待 500 - 700ms 才能执行完请求生成文件，随着程序执行时间越来越长（1000ms 以上），请求会花费更长时间。但是记录里面还有 4w 个文件没有生成的，如果一次性执行这么多请求会出现两个问题：（1）4G 内存可能爆掉，请求终端；（2）总的执行时间太长，大概 8-10h 完成（服务器用的是 Unicorn，多进程服务器）目前采用同步发送请求的方式断断续续的生成了 2w 多 pdf 文件（内存溢出，程序经常中断，花费好几天）&lt;/p&gt;

&lt;p&gt;理想的程序执行结果：
采用采用多线程异步异步发送 Http 请求缩短程序总的发送请求时间，发送完成后接收方继续执行即可（缩短总的文件生成时间，数分钟即可执行完成）；
如果请求失败再次执行请求，直到生成为止；&lt;/p&gt;

&lt;p&gt;于是找到了 EventMachine 和 EM-HTTP-Request 这样的异步请求处理工具：
采用如下处理过程：
先将 pdf 没有生成的记录获取出来，并构造出请求 url 放在 urls 数组中，
然后用 EventMachine 发送请求，每次取出 25 个，发送完成后执行下一组 url 请求&lt;/p&gt;

&lt;p&gt;代码如下：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;
&lt;span class="n"&gt;desc&lt;/span&gt; &lt;span class="s1"&gt;'use slice to perform  http request '&lt;/span&gt;
&lt;span class="n"&gt;task&lt;/span&gt; &lt;span class="ss"&gt;gpdf: :environment&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="n"&gt;urls&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
  &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to_i&lt;/span&gt;
  &lt;span class="nb"&gt;p&lt;/span&gt; &lt;span class="s1"&gt;'generate     use event machine'&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to_s&lt;/span&gt;
  &lt;span class="n"&gt;report_ids&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;UsLog&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find_by_sql&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"select distinct id  ,xml from  us_logs where  pdf ='false'  "&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

  &lt;span class="c1"&gt;#store  all  url in urls&lt;/span&gt;
  &lt;span class="n"&gt;report_ids&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;each_with_index&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;rep&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
    &lt;span class="nb"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;rep&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;id&lt;/span&gt;
    &lt;span class="n"&gt;xml&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;rep&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;xml&lt;/span&gt;
    &lt;span class="n"&gt;gpdf_url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="no"&gt;URI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="no"&gt;HOSTURI&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/create_pdf?uuid=&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;xml&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;urls&lt;/span&gt;  &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;gpdf_url&lt;/span&gt;

    &lt;span class="c1"&gt;#record time&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;index&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to_i&lt;/span&gt;
      &lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;
      &lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="n"&gt;index&lt;/span&gt;
      &lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

  &lt;span class="no"&gt;EventMachine&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;multi&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;EventMachine&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;MultiRequest&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;
    &lt;span class="n"&gt;urls&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;each_slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;with_index&lt;/span&gt;  &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;bulk_urls&lt;/span&gt; &lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;arr_index&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
      &lt;span class="no"&gt;EM&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;next_tick&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
        &lt;span class="c1"&gt;#bulk_urls.each {|url| multi.add(url,EventMachine::HttpRequest.new(url).get(:timeout =&amp;gt; 5))}&lt;/span&gt;
        &lt;span class="n"&gt;bulk_urls&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;each_with_index&lt;/span&gt;  &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;

          &lt;span class="c1"&gt;# abc is the unique key of multi http request&lt;/span&gt;
          &lt;span class="n"&gt;abc&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;arr_index&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;25&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;index&lt;/span&gt;

          &lt;span class="c1"&gt;# add multiple requests to the multi-handler&lt;/span&gt;
          &lt;span class="n"&gt;multi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;abc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="no"&gt;EventMachine&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;HttpRequest&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:timeout&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

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

    &lt;span class="n"&gt;multi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;callback&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nb"&gt;p&lt;/span&gt; &lt;span class="n"&gt;multi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;responses&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:succeeded&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
      &lt;span class="nb"&gt;p&lt;/span&gt; &lt;span class="n"&gt;multi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;responses&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:failed&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
      &lt;span class="no"&gt;EventMachine&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stop&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;程序执行后出现堆栈调用异常，如下：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;f42cb438000&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="n"&gt;f42cb45a000&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;xp&lt;/span&gt; &lt;span class="mo"&gt;00000000&lt;/span&gt; &lt;span class="mi"&gt;08&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mo"&gt;01&lt;/span&gt; &lt;span class="mi"&gt;269491&lt;/span&gt;                     &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;lib&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;x86_64&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;linux&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;gnu&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;ld&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;2.15&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;so&lt;/span&gt;
&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="n"&gt;f42cb53b000&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="n"&gt;f42cb641000&lt;/span&gt; &lt;span class="n"&gt;rw&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nb"&gt;p&lt;/span&gt; &lt;span class="mo"&gt;00000000&lt;/span&gt; &lt;span class="mo"&gt;00&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mo"&gt;00&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; 
&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="n"&gt;f42cb64c000&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="n"&gt;f42cb64d000&lt;/span&gt; &lt;span class="n"&gt;rw&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nb"&gt;p&lt;/span&gt; &lt;span class="mo"&gt;00000000&lt;/span&gt; &lt;span class="mo"&gt;00&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mo"&gt;00&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; 
&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="n"&gt;f42cb64d000&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="n"&gt;f42cb654000&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="mo"&gt;00000000&lt;/span&gt; &lt;span class="mi"&gt;08&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mo"&gt;01&lt;/span&gt; &lt;span class="mi"&gt;3809707&lt;/span&gt;                    &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;usr&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;lib&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;x86_64&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;linux&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;gnu&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;gconv&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;gconv&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;modules&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;cache&lt;/span&gt;
&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="n"&gt;f42cb654000&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="n"&gt;f42cb655000&lt;/span&gt; &lt;span class="o"&gt;---&lt;/span&gt;&lt;span class="nb"&gt;p&lt;/span&gt; &lt;span class="mo"&gt;00000000&lt;/span&gt; &lt;span class="mo"&gt;00&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mo"&gt;00&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; 
&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="n"&gt;f42cb655000&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="n"&gt;f42cb65a000&lt;/span&gt; &lt;span class="n"&gt;rw&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nb"&gt;p&lt;/span&gt; &lt;span class="mo"&gt;00000000&lt;/span&gt; &lt;span class="mo"&gt;00&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mo"&gt;00&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;                          &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;26307&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="n"&gt;f42cb65a000&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="n"&gt;f42cb65b000&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nb"&gt;p&lt;/span&gt; &lt;span class="mo"&gt;00022000&lt;/span&gt; &lt;span class="mi"&gt;08&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mo"&gt;01&lt;/span&gt; &lt;span class="mi"&gt;269491&lt;/span&gt;                     &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;lib&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;x86_64&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;linux&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;gnu&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;ld&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;2.15&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;so&lt;/span&gt;
&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="n"&gt;f42cb65b000&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="n"&gt;f42cb65d000&lt;/span&gt; &lt;span class="n"&gt;rw&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nb"&gt;p&lt;/span&gt; &lt;span class="mo"&gt;00023000&lt;/span&gt; &lt;span class="mi"&gt;08&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mo"&gt;01&lt;/span&gt; &lt;span class="mi"&gt;269491&lt;/span&gt;                     &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;lib&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;x86_64&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;linux&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;gnu&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;ld&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;2.15&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;so&lt;/span&gt;
&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="n"&gt;ffff0940000&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="n"&gt;ffff0962000&lt;/span&gt; &lt;span class="n"&gt;rw&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nb"&gt;p&lt;/span&gt; &lt;span class="mo"&gt;00000000&lt;/span&gt; &lt;span class="mo"&gt;00&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mo"&gt;00&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; 
&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="n"&gt;ffff09b2000&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="n"&gt;ffff09b3000&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;xp&lt;/span&gt; &lt;span class="mo"&gt;00000000&lt;/span&gt; &lt;span class="mo"&gt;00&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mo"&gt;00&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;                          &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;vdso&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;ffffffffff600000&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;ffffffffff601000&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;xp&lt;/span&gt; &lt;span class="mo"&gt;00000000&lt;/span&gt; &lt;span class="mo"&gt;00&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mo"&gt;00&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;                  &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;vsyscall&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;


&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;NOTE&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="no"&gt;You&lt;/span&gt; &lt;span class="n"&gt;may&lt;/span&gt; &lt;span class="n"&gt;have&lt;/span&gt; &lt;span class="n"&gt;encountered&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;bug&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="no"&gt;Ruby&lt;/span&gt; &lt;span class="n"&gt;interpreter&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;extension&lt;/span&gt; &lt;span class="n"&gt;libraries&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;span class="no"&gt;Bug&lt;/span&gt; &lt;span class="n"&gt;reports&lt;/span&gt; &lt;span class="n"&gt;are&lt;/span&gt; &lt;span class="n"&gt;welcome&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;span class="no"&gt;For&lt;/span&gt; &lt;span class="ss"&gt;details: &lt;/span&gt;&lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="ss"&gt;:/&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;www&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ruby&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;lang&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;org&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;bugreport&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;html&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;不知为何会出现上面的错误，并且 IDEshell 中和系统的终端执行结果也不一样；
Ubuntu 自带系统终端中没有错误输出，最终 callback 中打印的信息为 null
IDE（rubymine）的 shell 输出如上，提示段转储错误&lt;/p&gt;

&lt;p&gt;最终请求没有发送成功，接收方的 server 没有任何日志输出，请教做过类似多请求并发处理的大大们给些指导建议，再次感谢！
&lt;a href="/hooopo" class="user-mention" title="@hooopo"&gt;&lt;i&gt;@&lt;/i&gt;hooopo&lt;/a&gt; &lt;a href="/pzgz" class="user-mention" title="@pzgz"&gt;&lt;i&gt;@&lt;/i&gt;pzgz&lt;/a&gt;  &lt;a href="/skandhas" class="user-mention" title="@skandhas"&gt;&lt;i&gt;@&lt;/i&gt;skandhas&lt;/a&gt;   &lt;a href="/luikore" class="user-mention" title="@luikore"&gt;&lt;i&gt;@&lt;/i&gt;luikore&lt;/a&gt;  &lt;a href="/zw963" class="user-mention" title="@zw963"&gt;&lt;i&gt;@&lt;/i&gt;zw963&lt;/a&gt;  &lt;/p&gt;</description>
      <author>yutian</author>
      <pubDate>Fri, 06 Jun 2014 17:44:12 +0800</pubDate>
      <link>https://ruby-china.org/topics/19790</link>
      <guid>https://ruby-china.org/topics/19790</guid>
    </item>
    <item>
      <title>聊聊 Gitlab 的钩子问题</title>
      <description>&lt;p&gt;项目频繁需要提交部署到测试机器上，因此想实现类似 Heroku 平台上的提交代码实现部署，因此接触了 Git 里面的钩子 hook，并对钩子进行了解。项目采用 Gitlab 管理代码，因此到服务器上对项目路径下的 hooks   post-receive 脚本做了修改，终于实现了自动部署。但是，新的问题产生了：
   &lt;strong&gt;Gitlab 上每一个项目 push 的时候，我们的项目都会实现部署，太令人 amazing 了！！&lt;/strong&gt;
    于是又回到 Gitlab 服务器去查看钩子里面的内容。当用 ls -al 查看 hooks 下的内容时候，谜底突然揭开：
Gilab 上所有项目库下的 hooks post-receive  都链接到  gitlab-shell/hooks/post-receive 这个脚本上，取消自己项目里钩子到 gitlab-shell 下的链接 link  把部署的脚本单独写到自己项目的 post-receive，问题终于解决。
    问题原因：shell 到 server 后，终端不支持彩色高亮显示，全部是白色显示，无法分清楚文件、目录和链接，对 bashrc 做下修改即可。
     具体为啥让所有项目的 hooks 都链接到同一个文件，这个就不去揣测了&lt;/p&gt;

&lt;p&gt;附 bashrc 内容：&lt;/p&gt;

&lt;p&gt;alias ls='ls --color=auto'
alias grep='grep --color=auto'&lt;/p&gt;

&lt;p&gt;#export PS1='/h:/w/$ '
umask 022&lt;/p&gt;
&lt;h2 id="You may uncomment the following lines if you want `ls' to be colorized:"&gt;You may uncomment the following lines if you want `ls' to be colorized:&lt;/h2&gt;
&lt;p&gt;export LS_OPTIONS='--color=auto'
eval "&lt;code&gt;dircolors&lt;/code&gt;"
alias ls='ls $LS_OPTIONS'
alias ll='ls $LS_OPTIONS -l'
alias l='ls $LS_OPTIONS -lA'&lt;/p&gt;</description>
      <author>yutian</author>
      <pubDate>Fri, 25 Apr 2014 17:32:54 +0800</pubDate>
      <link>https://ruby-china.org/topics/18854</link>
      <guid>https://ruby-china.org/topics/18854</guid>
    </item>
    <item>
      <title>Mongodb 安装慢到极致</title>
      <description>&lt;p&gt;想换个 mongodb 来和 pg 对比下，在 ubuntu 上进行安装的，脚本参考的是 &lt;a href="/huacnlee" class="user-mention" title="@huacnlee"&gt;&lt;i&gt;@&lt;/i&gt;huacnlee&lt;/a&gt;大大的 
&lt;a href="https://github.com/huacnlee/init.d/blob/master/install_mongodb" rel="nofollow" target="_blank"&gt;https://github.com/huacnlee/init.d/blob/master/install_mongodb&lt;/a&gt; 
结果安装了 4 个多小时才安装完（10k/s 的速度下载的），不知道大家在安装时候有没遇到此种情况和好的解决办法。&lt;/p&gt;</description>
      <author>yutian</author>
      <pubDate>Thu, 20 Mar 2014 09:51:44 +0800</pubDate>
      <link>https://ruby-china.org/topics/18028</link>
      <guid>https://ruby-china.org/topics/18028</guid>
    </item>
    <item>
      <title>如何请求远程的 pdf 文件，然后把请求的文件 render 到新打开的页面</title>
      <description>&lt;p&gt;背景介绍：本地 server 要访问文件服务器上的一个文件，两者不是同一个服务器，需要在请求到 pdf 文件后，render 到新打开的标签页。
尝试采用生成新 pdf 方式，生成新的空白 pdf 文件可以正常在新页面打开 (用 user 作为测试没问题)
遇到问题：请求远程的文件内容后追加到新的空白文档时提示不能包含非 utf8 编码的文件
Arguments to text methods must be UTF-8 encoded
不知道用这种思路解决问题是否合适？请教各位高人指点，谢谢！&lt;a href="/Rei" class="user-mention" title="@Rei"&gt;&lt;i&gt;@&lt;/i&gt;Rei&lt;/a&gt; &lt;a href="/leopku" class="user-mention" title="@leopku"&gt;&lt;i&gt;@&lt;/i&gt;leopku&lt;/a&gt;  &lt;a href="/nightire" class="user-mention" title="@nightire"&gt;&lt;i&gt;@&lt;/i&gt;nightire&lt;/a&gt;  &lt;a href="/ruby_sky" class="user-mention" title="@ruby_sky"&gt;&lt;i&gt;@&lt;/i&gt;ruby_sky&lt;/a&gt;&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;FileController&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;ApplicationController&lt;/span&gt;
  &lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'net/http'&lt;/span&gt;
  &lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'open-uri'&lt;/span&gt;
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;show&lt;/span&gt;
    &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;User&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;send_data&lt;/span&gt; &lt;span class="n"&gt;generate_pdf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
              &lt;span class="ss"&gt;:filename&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.pdf"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
              &lt;span class="ss"&gt;:type&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"application/pdf"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
              &lt;span class="ss"&gt;:disposition&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"inline"&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

  &lt;span class="kp"&gt;private&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;generate_pdf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
   &lt;span class="c1"&gt;# uri ='http://192.168.1.100/pdf/2347bdb5adf1c81775836b.pdf'&lt;/span&gt;
    &lt;span class="n"&gt;uri&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'www.cninfo.com.cn/finalpage/2013-08-29/63017888.PDF'&lt;/span&gt;
    &lt;span class="n"&gt;remote_full_url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;URI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;uri&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;remote_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;remote_full_url&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;
    &lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="n"&gt;remote_data&lt;/span&gt;
    &lt;span class="no"&gt;Prawn&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
      &lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:align&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="ss"&gt;:center&lt;/span&gt;
     &lt;span class="c1"&gt;#如果text后面的是remote_data的时候提示Arguments to text methods must be UTF-8 encoded&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;render&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;</description>
      <author>yutian</author>
      <pubDate>Fri, 29 Nov 2013 18:09:53 +0800</pubDate>
      <link>https://ruby-china.org/topics/15889</link>
      <guid>https://ruby-china.org/topics/15889</guid>
    </item>
    <item>
      <title>production 环境找不到 Extjs4 样式中的图片路径</title>
      <description>&lt;p&gt;项目背景描述:
raisl4 中使用了 Extjs4，把 Extjs4 的库和 css 放在 vendor 目录下，
vendor 目录结构如下
 javascripts&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;│&amp;nbsp;&amp;nbsp; └── extjs4
│&amp;nbsp;&amp;nbsp;     └── ext-all-dev.js
└── stylesheets
    └── extjs4
        └── resources
            ├── css
            │&amp;nbsp;&amp;nbsp; └── ext-all.css
            ├── ext-theme-access
            │&amp;nbsp;&amp;nbsp; └── images
            ├── ext-theme-classic
            │&amp;nbsp;&amp;nbsp; └── images
            ├── ext-theme-neptune
            │&amp;nbsp;&amp;nbsp; └── images
            │&amp;nbsp;&amp;nbsp;     ├── btn
            │&amp;nbsp;&amp;nbsp;     │&amp;nbsp;&amp;nbsp; ├── btn-default-large-bg.gif
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;修改 production.rb 中的配置&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;serve_static_assets&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kp"&gt;false&lt;/span&gt;
&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;assets&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;compile&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kp"&gt;false&lt;/span&gt;
&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;assets&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;digest&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;修改为：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;serve_static_assets&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt;  &lt;span class="err"&gt;（&lt;/span&gt;&lt;span class="n"&gt;不设置为true找不到&lt;/span&gt; &lt;span class="n"&gt;extjs相关文件&lt;/span&gt;&lt;span class="err"&gt;）&lt;/span&gt;
&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;assets&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;compile&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt; 
&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;assets&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;digest&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kp"&gt;false&lt;/span&gt;  &lt;span class="err"&gt;（&lt;/span&gt;&lt;span class="n"&gt;这个大概是改变assets文件的url的&lt;/span&gt;&lt;span class="err"&gt;）&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;现在加载 ext-all-dev.js 没有问题，但是加载图片的时候就不正常了，
application.css 中内容
require extjs4/resources/ext-theme-classic/ext-theme-classic-all
ext-theme-classic-all 这个文件中有类似 url(images/slider/slider-v-thumb.gif) 和
corners:url(images/btn/btn-default-small-pressed-corners.gif) 。项目去寻找 slider-v-thumb.gif  的时候提示找不到图片路径，发出的请求类似是：
&lt;a href="http://localhost:5000/assets/images/sizer/ne-handle.gif" rel="nofollow" target="_blank"&gt;http://localhost:5000/assets/images/sizer/ne-handle.gif&lt;/a&gt;
图片路径出现错误，不知道各路神仙有何高见，还请不吝赐教，提前谢谢诸位！&lt;/p&gt;</description>
      <author>yutian</author>
      <pubDate>Wed, 07 Aug 2013 09:57:44 +0800</pubDate>
      <link>https://ruby-china.org/topics/13121</link>
      <guid>https://ruby-china.org/topics/13121</guid>
    </item>
    <item>
      <title>Rails 4  Can't mass-assign protected attributes for XXXcontroller</title>
      <description>&lt;p&gt;使用 rails4 从前台获取参数，在 create 的时候出错，提示信息如下：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;WARNING: Can't mass-assign protected attributes for  XXX: name, spell_code, , insurance_number
    app/controllers/XXXX_controller.rb:32:in `create'
   (0.2ms)  BEGIN
  SQL (5.7ms)  INSERT INTO "XXXX" ("created_at", "updated_at") VALUES ($1, $2) RETURNING "id"  [["created_at", Thu, 25 Jul 2013 14:20:45 UTC +00:00], ["updated_at", Thu, 25 Jul 2013 14:20:45 UTC +00:00]]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;保存到数据库时候，参数消失，只保存了 create update _at  两个信息，
折腾了一天了，崩溃 ing，求教各位大侠赐教&lt;a href="/lgn21st" class="user-mention" title="@lgn21st"&gt;&lt;i&gt;@&lt;/i&gt;lgn21st&lt;/a&gt;  &lt;a href="/Rei" class="user-mention" title="@Rei"&gt;&lt;i&gt;@&lt;/i&gt;Rei&lt;/a&gt;&lt;/p&gt;</description>
      <author>yutian</author>
      <pubDate>Thu, 25 Jul 2013 22:48:25 +0800</pubDate>
      <link>https://ruby-china.org/topics/12780</link>
      <guid>https://ruby-china.org/topics/12780</guid>
    </item>
    <item>
      <title>rails 文档中的 engine  无法创建 comments</title>
      <description>&lt;p&gt;背景：最近想把项目实现模块化，于是看到了 rails 的 engine 这一章节，
照着文档（&lt;a href="http://guides.ruby-china.org/engines.html" rel="nofollow" target="_blank"&gt;http://guides.ruby-china.org/engines.html&lt;/a&gt;）走了一半，出现问题就再也走不下去了
问题：走到 3.2 节最后一部分，对 post 添加评论后出现了 route 错误:
No route matches {:action=&amp;gt;"show", :controller=&amp;gt;"blorgh/posts"}
路由配置如下：&lt;/p&gt;

&lt;p&gt;resources :posts 
 resources :posts do
   resources :comments
 end
 root :to =&amp;gt; "posts#index"
项目源码已经推送到 github：git@github.com:rubylab/blorgh.git
，还望各位大哥，大神们不吝指教，&lt;a href="/Rei" class="user-mention" title="@Rei"&gt;&lt;i&gt;@&lt;/i&gt;Rei&lt;/a&gt; &lt;a href="/jasl" class="user-mention" title="@jasl"&gt;&lt;i&gt;@&lt;/i&gt;jasl&lt;/a&gt;。在此先谢过诸位！ &lt;/p&gt;</description>
      <author>yutian</author>
      <pubDate>Tue, 04 Jun 2013 21:34:50 +0800</pubDate>
      <link>https://ruby-china.org/topics/11487</link>
      <guid>https://ruby-china.org/topics/11487</guid>
    </item>
    <item>
      <title>GitLab 搭建遇到的两个问题 克隆和 push pull 需要输入用户名和密码，只能采用 http 方式</title>
      <description>&lt;p&gt;新搭建了 GITLab5.1，用的是 LDAP 登陆，粘贴了自己的公钥到 gitlab 上，目前可以克隆 pushpull 等操作，但只能用 http 地址  &lt;a href="http://192.68.1.10/root/aaa.git" rel="nofollow" target="_blank"&gt;http://192.68.1.10/root/aaa.git&lt;/a&gt;   换为 ssh 地址 git@192.68.1.10:root/aaa.git  之后就会提示“fatal: The remote end hung up unexpectedly”  ；更令人郁闷的是每次进行 push、pull、clone 时候都需要输入 ldap 的用户名和密码之后才能完成相应操作，求教给如何配置才能避免上面两个问题？ &lt;a href="/Saito" class="user-mention" title="@Saito"&gt;&lt;i&gt;@&lt;/i&gt;Saito&lt;/a&gt; 
&lt;a href="/lgn21st" class="user-mention" title="@lgn21st"&gt;&lt;i&gt;@&lt;/i&gt;lgn21st&lt;/a&gt;  &lt;a href="/gene_wu" class="user-mention" title="@gene_wu"&gt;&lt;i&gt;@&lt;/i&gt;gene_wu&lt;/a&gt;&lt;/p&gt;</description>
      <author>yutian</author>
      <pubDate>Wed, 08 May 2013 11:09:16 +0800</pubDate>
      <link>https://ruby-china.org/topics/10810</link>
      <guid>https://ruby-china.org/topics/10810</guid>
    </item>
  </channel>
</rss>
