<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>046569</title>
    <link>https://ruby-china.org/046569</link>
    <description>厚积薄发,谨言慎行.</description>
    <language>en-us</language>
    <item>
      <title>使用 ngx_mruby 打造简易 WAF</title>
      <description>&lt;h3 id="mruby 是什么?"&gt;mruby 是什么？&lt;/h3&gt;
&lt;p&gt;简单的说就是符合 ISO 标准的轻量级 ( 嵌入式 ) 版本的 Ruby .没错，可以拿来直接操作树莓派。&lt;/p&gt;
&lt;h3 id="ngx_mruby 是什么?"&gt;ngx_mruby 是什么？&lt;/h3&gt;
&lt;p&gt;看名字就知道了，将 mruby 作为模块整合进了 Nginx .类似的还有 ngx_lua .&lt;/p&gt;
&lt;h3 id="mruby / ngx_mruby 的优势?"&gt;mruby / ngx_mruby 的优势？&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;高度可定制&lt;/li&gt;
&lt;li&gt;运行快速&lt;/li&gt;
&lt;li&gt;内存管理高效&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="WAF 有什么用?"&gt;WAF 有什么用？&lt;/h3&gt;
&lt;p&gt;WAF =&amp;gt; Web Application Firewall ,可以用来屏蔽常见的网站漏洞攻击。&lt;/p&gt;
&lt;h3 id="如何安装?"&gt;如何安装？&lt;/h3&gt;
&lt;p&gt;Debian wheezy 可以使用这个&lt;a href="https://gist.github.com/046569/20e399fc0ad83f10f653afd8a02c3252" rel="nofollow" target="_blank" title=""&gt;脚本&lt;/a&gt;一键安装。&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;memory + swap &amp;gt; 2 G .&lt;/li&gt;
&lt;li&gt;会同步编译安装 Nginx 1.9，有洁癖者自行更改。&lt;/li&gt;
&lt;li&gt;编译前检查 &lt;code&gt;build_config.rb&lt;/code&gt;,注释不需要的组件 ( mrbgems ).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="来点实际的?"&gt;来点实际的？&lt;/h3&gt;
&lt;p&gt;最近客户碰到个蛋疼骇客，盯着他千疮百孔的&lt;code&gt;DedeCMS&lt;/code&gt;不放。由于网站已经经过 N 次开发，阿里云默认的网站防火墙无法识别，短期内又无法升级修补，防护迫在眉睫。对手尝试注入，挂马，失败后又来采集。封了他几次 IP ,人家锲而不舍，搞来一堆肉鸡玩起了 CC .不堪其扰，最后通过定制 WAF 解决。&lt;/p&gt;
&lt;h3 id="我裤子都脱了,你就给我看这个?"&gt;我裤子都脱了，你就给我看这个？&lt;/h3&gt;
&lt;p&gt;男人太快真心不&amp;nbsp;xing 福。&lt;/p&gt;

&lt;p&gt;首先设定 Nginx 配置文件。&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Nginx.conf
location /m {
    mruby_content_handler '/root/hello.rb';
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;其次写过滤规则吧，推荐的方法是计算阈值。比如某一 IP 尝试扫描后台风险值 + 1 ,三秒内连续访问超过五次风险值 + 3 ,总计 5 分以上拖入黑名单。注意不要忘记设定白名单.数据库推荐使用 Redis .&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;# 初始化&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;initialize&lt;/span&gt;
  &lt;span class="vi"&gt;@db&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Redis&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="s1"&gt;'127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6379&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="vi"&gt;@req&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Nginx&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;
  &lt;span class="vi"&gt;@ip&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Nginx&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Connection&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="nf"&gt;remote_ip&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="c1"&gt;# 加入黑名单&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;add_black_list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="vi"&gt;@db.set&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="vi"&gt;@ip&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;_ban"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'1'&lt;/span&gt;
  &lt;span class="vi"&gt;@db.expire&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="vi"&gt;@ip&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;_ban"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;
  &lt;span class="n"&gt;err_msg&lt;/span&gt; &lt;span class="s2"&gt;"ban &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="vi"&gt;@ip&lt;/span&gt;&lt;span class="si"&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;msg&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="c1"&gt;# 重定向&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;redirect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;score&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;threshold&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;score&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;threshold&lt;/span&gt;
    &lt;span class="n"&gt;add_black_list&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="n"&gt;score&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; &amp;gt; &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;threshold&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;clear_time&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;
    &lt;span class="no"&gt;FALSE_BACKEND&lt;/span&gt;
  &lt;span class="k"&gt;else&lt;/span&gt;
    &lt;span class="no"&gt;TRUE_BACKEND&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="c1"&gt;# 过滤流程示意&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;filter&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="no"&gt;TRUE_BACKEND&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;white_list?&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="no"&gt;FALSE_BACKEND&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;black_list?&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;bad_ua?&lt;/span&gt;
    &lt;span class="n"&gt;add_black_list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'UA banned!'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="no"&gt;FALSE_BACKEND&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
  &lt;span class="n"&gt;redirect&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;incr_time&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;
  &lt;span class="n"&gt;redirect&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;incr_time&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;再次写测试吧，怎么写你懂的。不懂去学嘛，不想学就手动测吧，累死你丫的。&lt;code&gt;^_^&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;最后部署上看看效果，随时调整规则。补充下，最好做个网站后台，便于编辑规则和观察效果。&lt;/p&gt;</description>
      <author>046569</author>
      <pubDate>Fri, 22 Apr 2016 22:46:47 +0800</pubDate>
      <link>https://ruby-china.org/topics/29834</link>
      <guid>https://ruby-china.org/topics/29834</guid>
    </item>
    <item>
      <title>吡的一声穿越了</title>
      <description>&lt;p&gt;&lt;img src="//l.ruby-china.com/photo/2014/823721278b1430241b16ddc7e932210b.png" title="" alt=""&gt;
再刷新就正常了，似乎有点诡异&lt;/p&gt;</description>
      <author>046569</author>
      <pubDate>Wed, 29 Jan 2014 23:16:08 +0800</pubDate>
      <link>https://ruby-china.org/topics/17056</link>
      <guid>https://ruby-china.org/topics/17056</guid>
    </item>
    <item>
      <title>为什么是 binding.pry 而不是 pry.binding?</title>
      <description>&lt;p&gt;也包括 binding.pry_remote，经常写反，设计的初衷是什么？&lt;/p&gt;</description>
      <author>046569</author>
      <pubDate>Thu, 07 Nov 2013 21:59:53 +0800</pubDate>
      <link>https://ruby-china.org/topics/15380</link>
      <guid>https://ruby-china.org/topics/15380</guid>
    </item>
    <item>
      <title>酷站应该清理下了</title>
      <description>&lt;p&gt;很多网站下线很久了，比如:
Do8
乐维
面包圈
暖岛
乐彩生活圈
水晶之恋网&lt;/p&gt;</description>
      <author>046569</author>
      <pubDate>Thu, 07 Nov 2013 00:55:22 +0800</pubDate>
      <link>https://ruby-china.org/topics/15359</link>
      <guid>https://ruby-china.org/topics/15359</guid>
    </item>
    <item>
      <title>有关 Array #join 的 encoding</title>
      <description>&lt;p&gt;起因是这样：昨天有用户反应在网站某处输入中文会报错，查看日志发现&lt;code&gt;Encoding::CompatibilityError (incompatible character encodings: UTF-8 and ASCII-8BIT)&lt;/code&gt;,很显然编码出了问题。出问题的那行只是将一个 Gem 执行的结果进行了 join，当时的解决办法是 force_encoding.
今天详细尝试了下，发现此 Gem 返回的编码确实在变化，有时候是 UTF-8，有时候是 ASCII-8BIT.而我印象中从 1.9 开始 Ruby 是可以很好处理字符编码的。可是测试结果让我大跌眼镜：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'hello'&lt;/span&gt;&lt;span class="p"&gt;]&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;push&lt;/span&gt; &lt;span class="s1"&gt;'kitty'&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;force_encoding&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'ASCII-8BIT'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nb"&gt;puts&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;join&lt;/span&gt;
&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;hellokitty&lt;/span&gt;

&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'问题'&lt;/span&gt;&lt;span class="p"&gt;]&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;push&lt;/span&gt; &lt;span class="s1"&gt;'错误'&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;force_encoding&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'ASCII-8BIT'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nb"&gt;puts&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;join&lt;/span&gt;
&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;incompatible&lt;/span&gt; &lt;span class="n"&gt;character&lt;/span&gt; &lt;span class="ss"&gt;encodings: &lt;/span&gt;&lt;span class="no"&gt;UTF&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="no"&gt;ASCII&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="no"&gt;BIT&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;Encoding&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;CompatibilityError&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;至此我认为问题出在#join 上，但 nobu 认为是"Third Party's Issue",理由是"Bugs in gems return ASCII-8BIT strings.".
可是脱离了此 Gem，执行结果仍然不同。为什么不同语言的执行结果不同却不认为是 Bug 呢？谁能详细解释下？&lt;/p&gt;</description>
      <author>046569</author>
      <pubDate>Sat, 02 Nov 2013 20:35:01 +0800</pubDate>
      <link>https://ruby-china.org/topics/15249</link>
      <guid>https://ruby-china.org/topics/15249</guid>
    </item>
    <item>
      <title>Active Record Migrations 中设置默认值的一个坑</title>
      <description>&lt;p&gt;所有的坑都来自于 &lt;strong&gt;无知&lt;/strong&gt; ,这次也不例外，我又掉坑里了...&lt;/p&gt;

&lt;p&gt;先来看段代码：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;change&lt;/span&gt;
  &lt;span class="n"&gt;add_column&lt;/span&gt; &lt;span class="ss"&gt;:servers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:vip_date&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:date&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:default&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="no"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;today&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这是一个很常见的迁移任务，新增一栏，设置默认值。执行迁移也毫无警告，看起来一切都那么美好。而真相其实是这样的：&lt;/p&gt;

&lt;p&gt;假设今天是 9 月 9 日：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="no"&gt;Server&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="nf"&gt;vip_date&lt;/span&gt;  &lt;span class="c1"&gt;#=&amp;gt; Sun, 09 Sep 2013&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="no"&gt;Server&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="nf"&gt;vip_date&lt;/span&gt;  &lt;span class="c1"&gt;#=&amp;gt; Sun, 09 Sep 2013&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;见鬼，怎么还是相同的日期？难道&lt;code&gt;Date.today&lt;/code&gt;秀逗了？&lt;/p&gt;

&lt;p&gt;表象可能有很多种，而真相只有一个：&lt;/p&gt;

&lt;p&gt;Active Record Migrations 并不支持 &lt;strong&gt;&lt;em&gt;动态默认值&lt;/em&gt;&lt;/strong&gt;,你应该在回调中处理，比如&lt;code&gt;after_initialize&lt;/code&gt;.&lt;/p&gt;</description>
      <author>046569</author>
      <pubDate>Sun, 29 Sep 2013 12:57:51 +0800</pubDate>
      <link>https://ruby-china.org/topics/14471</link>
      <guid>https://ruby-china.org/topics/14471</guid>
    </item>
    <item>
      <title>Ruby On Rails 3.2 升级到 4.0</title>
      <description>&lt;p&gt;以下简称 (R3 和 R4),步骤比较多，做下笔记：&lt;/p&gt;
&lt;h3 id="升级你的Gemfile"&gt;升级你的 Gemfile&lt;/h3&gt;
&lt;p&gt;Gemfile 中的 Rails 版本修改为&lt;code&gt;gem 'rails', '~&amp;gt;4.0.0'&lt;/code&gt;,删除&lt;code&gt;assets group&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;执行&lt;code&gt;bundle update&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;如果你希望使用旧的 Model 安全机制，那么要记得添加&lt;code&gt;protected_attributes&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id="升级配置文件"&gt;升级配置文件&lt;/h3&gt;&lt;h4 id="执行rake rails:update"&gt;执行&lt;code&gt;rake rails:update&lt;/code&gt;
&lt;/h4&gt;
&lt;p&gt;以下参数已经取消：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;config.whiny_nils = true&lt;/li&gt;
&lt;li&gt;config.action_dispatch.best_standards_support = :builtin&lt;/li&gt;
&lt;li&gt;config.active_record.mass_assignment_sanitizer = :strict&lt;/li&gt;
&lt;li&gt;config.active_record.auto_explain_threshold_in_seconds = 0.5&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;以下参数为新增：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;config.eager_load = false&lt;/li&gt;
&lt;li&gt;config.active_record.migration_error = :page_load&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;上述参数会自动变更，若是有其他问题自己手动处理下。&lt;/p&gt;
&lt;h4 id="config/application.rb"&gt;config/application.rb&lt;/h4&gt;
&lt;p&gt;R3 中 application.rb 文件中的 filter_parameters 参数升级成独立的程序了，在 R4 中为 config/initializers/filter_parameters.rb 文件。&lt;/p&gt;

&lt;p&gt;若你使用了&lt;code&gt;protected_attributes&lt;/code&gt;,记得设置&lt;code&gt;config.active_record.whitelist_attributes = true&lt;/code&gt;&lt;/p&gt;
&lt;h4 id="config/initializers/secret_token.rb"&gt;config/initializers/secret_token.rb&lt;/h4&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Ymate::Application.config.secret_token = '旧令牌'
Ymate::Application.config.secret_key_base = '新令牌'
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;你可以通过使用&lt;code&gt;rake secret&lt;/code&gt;来快速生成令牌。&lt;/p&gt;
&lt;h4 id="更多???"&gt;更多？??&lt;/h4&gt;
&lt;p&gt;我是来抛砖引玉的，等待更多人分享经验吧！&lt;/p&gt;

&lt;p&gt;推荐下&lt;a href="/nightire" class="user-mention" title="@nightire"&gt;&lt;i&gt;@&lt;/i&gt;nightire&lt;/a&gt; 的 &lt;a href="https://gist.github.com/nightire/5227819" rel="nofollow" target="_blank" title=""&gt;拥抱 Rails 4 —— 详述 Rails 4 的新变化&lt;/a&gt;&lt;/p&gt;</description>
      <author>046569</author>
      <pubDate>Fri, 09 Aug 2013 13:37:38 +0800</pubDate>
      <link>https://ruby-china.org/topics/13194</link>
      <guid>https://ruby-china.org/topics/13194</guid>
    </item>
    <item>
      <title>爬虫引起的服务器日志泛滥</title>
      <description>&lt;p&gt;不知道大家遇到过没有:
经常有些爬虫或者扫描器之类的搞的日志很乱 (经常是阿里云的云盾我会乱说么),正常日志被湮没，比如：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Started GET "/register.php" for 110.75.186.226 at 2013-05-23 05:47:32 +0800

ActionController::RoutingError (No route matches [GET] "/register.php"):
  actionpack (3.2.13) lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call'
  actionpack (3.2.13) lib/action_dispatch/middleware/show_exceptions.rb:56:in `call'
  railties (3.2.13) lib/rails/rack/logger.rb:32:in `call_app'
  railties (3.2.13) lib/rails/rack/logger.rb:16:in `block in call'
  activesupport (3.2.13) lib/active_support/tagged_logging.rb:22:in `tagged'
  railties (3.2.13) lib/rails/rack/logger.rb:16:in `call'
  actionpack (3.2.13) lib/action_dispatch/middleware/request_id.rb:22:in `call'
  rack (1.4.5) lib/rack/methodoverride.rb:21:in `call'
  rack (1.4.5) lib/rack/runtime.rb:17:in `call'
  activesupport (3.2.13) lib/active_support/cache/strategy/local_cache.rb:72:in `call'
  rack (1.4.5) lib/rack/lock.rb:15:in `call'
  rack-cache (1.2) lib/rack/cache/context.rb:136:in `forward'
  rack-cache (1.2) lib/rack/cache/context.rb:245:in `fetch'
  rack-cache (1.2) lib/rack/cache/context.rb:185:in `lookup'
  rack-cache (1.2) lib/rack/cache/context.rb:66:in `call!'
  rack-cache (1.2) lib/rack/cache/context.rb:51:in `call'
  railties (3.2.13) lib/rails/engine.rb:479:in `call'
  railties (3.2.13) lib/rails/application.rb:223:in `call'
  railties (3.2.13) lib/rails/railtie/configurable.rb:30:in `method_missing'
  thin (1.5.1) lib/thin/connection.rb:81:in `block in pre_process'
                                                                                     690,3          5%
  railties (3.2.13) lib/rails/railtie/configurable.rb:30:in `method_missing'
  thin (1.5.1) lib/thin/connection.rb:81:in `block in pre_process'
  thin (1.5.1) lib/thin/connection.rb:79:in `catch'
  thin (1.5.1) lib/thin/connection.rb:79:in `pre_process'
  thin (1.5.1) lib/thin/connection.rb:54:in `process'
  thin (1.5.1) lib/thin/connection.rb:39:in `receive_data'
  eventmachine (1.0.3) lib/eventmachine.rb:187:in `run_machine'
  eventmachine (1.0.3) lib/eventmachine.rb:187:in `run'
  thin (1.5.1) lib/thin/backends/base.rb:63:in `start'
  thin (1.5.1) lib/thin/server.rb:159:in `start'
  thin (1.5.1) lib/thin/controllers/controller.rb:86:in `start'
  thin (1.5.1) lib/thin/runner.rb:187:in `run_command'
  thin (1.5.1) lib/thin/runner.rb:152:in `run!'
  thin (1.5.1) bin/thin:6:in `&amp;lt;top (required)&amp;gt;'
  /usr/local/rvm/gems/ruby-2.0.0-p195/bin/thin:23:in `load'
  /usr/local/rvm/gems/ruby-2.0.0-p195/bin/thin:23:in `&amp;lt;main&amp;gt;'
  /usr/local/rvm/gems/ruby-2.0.0-p195/bin/ruby_noexec_wrapper:14:in `eval'
  /usr/local/rvm/gems/ruby-2.0.0-p195/bin/ruby_noexec_wrapper:14:in `&amp;lt;main&amp;gt;'
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;有没有什么好方法解决呢？设定个规则触发几次 404 就锁 IP???&lt;/p&gt;</description>
      <author>046569</author>
      <pubDate>Wed, 29 May 2013 13:03:25 +0800</pubDate>
      <link>https://ruby-china.org/topics/11315</link>
      <guid>https://ruby-china.org/topics/11315</guid>
    </item>
    <item>
      <title>全新 10.8 系统无法使用 RVM 安装 Ruby on Rails 环境 (已解决)</title>
      <description>&lt;p&gt;背景：
向 MM 传道 Mac 下用 Ruby on Rails 多方便，结果 MM 换了 Mac 后掉 RVM 坑里迄今没爬出来（我也掉进去了）。在 RVM 那发了 issue 目测过了 4 天还未解决。详情请移步
&lt;a href="https://github.com/wayneeseguin/rvm/issues/1797" rel="nofollow" target="_blank"&gt;https://github.com/wayneeseguin/rvm/issues/1797&lt;/a&gt;
经过反复测试发现 10.7 --&amp;gt;10.8 的系统都正常，而全新的 10.8 无法安装。
求拉一把，一个坑里两条人命啊&lt;/p&gt;</description>
      <author>046569</author>
      <pubDate>Wed, 17 Apr 2013 09:01:35 +0800</pubDate>
      <link>https://ruby-china.org/topics/10266</link>
      <guid>https://ruby-china.org/topics/10266</guid>
    </item>
    <item>
      <title>再丑的媳妇也得见公婆 (YMate)</title>
      <description>&lt;p&gt;连着熬夜好几天，搞了个这么个东西出来...
YMate 是目前管理服务器最简单的方式 (自封的...,只支持 Debian 6.X/Ubuntu 10.04),具有如下特点:
简单：无需安装额外的软件，全部操作通过 Web 进行.
纯净：所有软件仅使用官方源 (安装 Discuz! 需要四分钟，由于官方限速有三分半都在下载.),不安装任何额外软件.
高效：一台还是一百台，配置统一环境只需一键 (可自定义).&lt;/p&gt;

&lt;p&gt;你只需要添加服务器:
&lt;img src="//l.ruby-china.com/photo/f743da994bc85b62d8832e84ae4f4e17.png" title="" alt="添加服务器"&gt;
勾选要操作的服务器与任务:
&lt;img src="//l.ruby-china.com/photo/a591a7df07f89313b10f2461f72f266d.png" title="" alt="任务"&gt;
来杯咖啡，稍候片刻即可.
内置的优化模块会根据任务智能进行必要的优化。例如:安装 Discuz! X2.5 会启用 XCache 并调整 SQL 配置。&lt;/p&gt;

&lt;p&gt;以上是广告.
整站使用 Ruby On Rails + Shell,Bug 很多，大家想笑就笑吧...&lt;/p&gt;</description>
      <author>046569</author>
      <pubDate>Tue, 09 Oct 2012 21:56:30 +0800</pubDate>
      <link>https://ruby-china.org/topics/5950</link>
      <guid>https://ruby-china.org/topics/5950</guid>
    </item>
    <item>
      <title>QQ 互联的 SDK,需要的拿去.</title>
      <description>&lt;p&gt;项目在这：&lt;a href="https://github.com/046569/qq" rel="nofollow" target="_blank"&gt;https://github.com/046569/qq&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="Ruby On Rails的那个使用方法:"&gt;Ruby On Rails 的那个使用方法：&lt;/h2&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1.丢到lib文件夹去,以后会打包的...
2.在你喜欢的地方定义:
APPID='你的ID'
APPKEY='你的key'
REDURL='&amp;amp;redirect_uri=你的跳转地址'
3.其他就随你喜欢了,都是力气活.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;目前已完成的 API:
&lt;a href="http://wiki.opensns.qq.com/wiki/%E3%80%90QQ%E7%99%BB%E5%BD%95%E3%80%91API%E6%96%87%E6%A1%A3" rel="nofollow" target="_blank"&gt;http://wiki.opensns.qq.com/wiki/%E3%80%90QQ%E7%99%BB%E5%BD%95%E3%80%91API%E6%96%87%E6%A1%A3&lt;/a&gt;
中所有不需要额外申请权限的，共计十几个吧...
不爽的地方直接在论坛喷，喷完记得 fork 下，我造的轮子都是方的...  &lt;/p&gt;</description>
      <author>046569</author>
      <pubDate>Thu, 31 May 2012 20:29:07 +0800</pubDate>
      <link>https://ruby-china.org/topics/3586</link>
      <guid>https://ruby-china.org/topics/3586</guid>
    </item>
  </channel>
</rss>
