<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>zfjoy520 (小朱)</title>
    <link>https://ruby-china.org/zfjoy520</link>
    <description>“灵活就业人员”</description>
    <language>en-us</language>
    <item>
      <title>[写给一些还不知道的 PG 们] Array#dig, Hash#dig, OpenStruct#dig, New features in ruby 2.3</title>
      <description>&lt;p&gt;原文：&lt;a href="https://blog.blockscore.com/new-features-in-ruby-2-3/" rel="nofollow" target="_blank"&gt;https://blog.blockscore.com/new-features-in-ruby-2-3/&lt;/a&gt;
discussion: &lt;a href="http://stackoverflow.com/questions/34346653/how-do-i-use-arraydig-and-hashdig-introduced-in-ruby-2-3" rel="nofollow" target="_blank"&gt;http://stackoverflow.com/questions/34346653/how-do-i-use-arraydig-and-hashdig-introduced-in-ruby-2-3&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Array#dig, Hash#dig, OpenStruct#dig in ruby 2.3, 抛弃老旧的 xx[:a][:b][:c]，xx.fetch(:a, {}).fetch(:b, {}).fetch(:c, nil) 吧&lt;/p&gt;
&lt;h3 id="Array"&gt;Array&lt;/h3&gt;&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[[[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&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;results&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dig&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# =&amp;gt; 1&lt;/span&gt;
&lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dig&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# =&amp;gt; nil&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="Hash"&gt;Hash&lt;/h3&gt;&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="ss"&gt;user: &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="ss"&gt;address: &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="ss"&gt;street1: &lt;/span&gt;&lt;span class="s1"&gt;'123 Main street'&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&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="nf"&gt;dig&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:user&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:address&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:street1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# =&amp;gt; '123 Main street'&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;dig&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:user&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:address&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:street2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# =&amp;gt; nil&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="OpenStruct"&gt;OpenStruct&lt;/h3&gt;&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;address&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;OpenStruct&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;'city'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"Anytown NC"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'zip'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;12345&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;person&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;OpenStruct&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;'name'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'John Smith'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'address'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;address&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dig&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:address&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'zip'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# =&amp;gt; 12345&lt;/span&gt;
&lt;span class="n"&gt;person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dig&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:business_address&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'zip'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# =&amp;gt; nil&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="低版本ruby patch"&gt;低版本 ruby patch&lt;/h2&gt;&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Array&lt;/span&gt;
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;dig&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;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;indices&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="no"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;indices&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;flatten&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;inject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;result&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="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:[]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;rescue&lt;/span&gt; &lt;span class="kp"&gt;nil&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;unless&lt;/span&gt; &lt;span class="no"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;method_defined?&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:dig&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;class&lt;/span&gt; &lt;span class="nc"&gt;Hash&lt;/span&gt;
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;dig&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;names&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="no"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;names&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;flatten&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;inject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;name&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:[]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;rescue&lt;/span&gt; &lt;span class="kp"&gt;nil&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;unless&lt;/span&gt; &lt;span class="no"&gt;Hash&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;method_defined?&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:dig&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;class&lt;/span&gt; &lt;span class="nc"&gt;OpenStruct&lt;/span&gt;
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;dig&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;names&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;begin&lt;/span&gt;
      &lt;span class="nb"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;name&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to_sym&lt;/span&gt;
    &lt;span class="k"&gt;rescue&lt;/span&gt; &lt;span class="no"&gt;NoMethodError&lt;/span&gt;
      &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="no"&gt;TypeError&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="nb"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; is not a symbol nor a string"&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
    &lt;span class="vi"&gt;@table.dig&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;names&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;unless&lt;/span&gt; &lt;span class="no"&gt;OpenStruct&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;method_defined?&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:dig&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;也可以将 Array 和 Hash 合成一个，因为他们都 include Enumerable&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;Enumerable&lt;/span&gt;
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;dig&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="no"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;arg&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;flatten&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;inject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;arg&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:[]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;arg&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;rescue&lt;/span&gt; &lt;span class="kp"&gt;nil&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;unless&lt;/span&gt; &lt;span class="no"&gt;Enumerable&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;method_defined?&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:dig&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;</description>
      <author>zfjoy520</author>
      <pubDate>Thu, 12 May 2016 17:54:45 +0800</pubDate>
      <link>https://ruby-china.org/topics/30001</link>
      <guid>https://ruby-china.org/topics/30001</guid>
    </item>
    <item>
      <title>Rails Log 格式化 + Kids日志收集</title>
      <description>&lt;p&gt;晚上无意间翻到了&lt;a href="/taojay315" class="user-mention" title="@taojay315"&gt;&lt;i&gt;@&lt;/i&gt;taojay315&lt;/a&gt; 的关于日志收集的帖子 (&lt;a href="https://ruby-china.org/topics/27523" rel="nofollow" target="_blank"&gt;https://ruby-china.org/topics/27523&lt;/a&gt;)，正好这段时间也在研究
知乎的 Kids&lt;/p&gt;

&lt;p&gt;所以就借了&lt;a href="/taojay315" class="user-mention" title="@taojay315"&gt;&lt;i&gt;@&lt;/i&gt;taojay315&lt;/a&gt;的思想和代码，根据自己的想法，写了一个 demo，见：&lt;a href="https://github.com/zfjoy520/lograge_service_demo" rel="nofollow" target="_blank"&gt;https://github.com/zfjoy520/lograge_service_demo&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="lograge_service_demo"&gt;lograge_service_demo&lt;/h2&gt;&lt;h2 id="基于 lograge + kids + taojay315的一篇文章"&gt;基于 lograge + kids + taojay315 的一篇文章&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://ruby-china.org/topics/27523" title=""&gt;Rails Log Process&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;写的一个即可以让 Rails 保持原生本机文件 LOG 不变，
又可以将 request / sql / exception 等日志发往 kids 的一个 demo.&lt;/p&gt;
&lt;h2 id="原作者在这里: https://ruby-china.org/taojay315"&gt;原作者在这里：&lt;a href="https://ruby-china.org/taojay315" title=""&gt;https://ruby-china.org/taojay315&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;其中，对 Rails 原生的丑日志的重新格式化部分抄自:
concise_logging: &lt;a href="https://github.com/gshaw/concise_logging" rel="nofollow" target="_blank" title=""&gt;https://github.com/gshaw/concise_logging&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;并有所修改。&lt;/p&gt;
&lt;h2 id="相关事项"&gt;相关事项&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Ruby 2.3.0&lt;/li&gt;
&lt;li&gt;Rails 4.2.5&lt;/li&gt;
&lt;li&gt;Kids: &lt;a href="https://github.com/zhihu/kids" rel="nofollow" target="_blank" title=""&gt;https://github.com/zhihu/kids&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Kids 安装及使用方式见：&lt;a href="https://github.com/zhihu/kids/blob/master/README.zh_CN.md" rel="nofollow" target="_blank" title=""&gt;https://github.com/zhihu/kids/blob/master/README.zh_CN.md&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Kids 启动所需配置文件在：config/conf/kids_server.conf&lt;/li&gt;
&lt;li&gt;Kids 连接配置文件在：config/settings/kids.yml&lt;/li&gt;
&lt;li&gt;配置文件加载用到了：&lt;a href="https://github.com/intridea/hashie" rel="nofollow" target="_blank" title=""&gt;hashie&lt;/a&gt; 中的 Hashie::Mash&lt;/li&gt;
&lt;li&gt;不太喜欢将一大堆配置文件都放在 config 目录下，所以在 config 目录下新建了一个 settings 目录 (config/settings)&lt;/li&gt;
&lt;li&gt;里面的 *.yml 都将加载到 ::Settings::Xxx 中&lt;/li&gt;
&lt;li&gt;相关的 initializer 文件在：config/initializers/settings.rb&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="开始吧"&gt;开始吧&lt;/h2&gt;&lt;h3 id="安装Kids"&gt;安装 Kids&lt;/h3&gt;
&lt;p&gt;下载 &lt;a href="https://github.com/zhihu/kids/releases" rel="nofollow" target="_blank" title=""&gt;Kids 源码发布包&lt;/a&gt;（文件名为 kids-VERSION.tar.gz），运行：&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;tar &lt;/span&gt;xzf kids-VERSION.tar.gz
&lt;span class="nb"&gt;cd &lt;/span&gt;kids-VERSION
./configure
make &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; make &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="Kids 编译好后，运行："&gt;Kids 编译好后，运行：&lt;/h3&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;kids &lt;span class="nt"&gt;-c&lt;/span&gt; lograge_service_demo/config/conf/kids_server.conf 
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="kids 使用 redis 协议，打开一个rails console："&gt;kids 使用 redis 协议，打开一个 rails console：&lt;/h3&gt;&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="mf"&gt;2.3&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="ss"&gt;:xxx&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;r&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="ss"&gt;port: &lt;/span&gt;&lt;span class="mi"&gt;3388&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mf"&gt;2.3&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="ss"&gt;:xxx&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;psubscribe&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="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;on&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="mf"&gt;2.3&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="ss"&gt;:xxx&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;   &lt;span class="n"&gt;on&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pmessage&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;pattern&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="mf"&gt;2.3&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="ss"&gt;:xxx&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;     &lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="s2"&gt;"pattern: &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;pattern&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;, channel: &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;channel&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;, message: &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="mf"&gt;2.3&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="ss"&gt;:xxx&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;   &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="mf"&gt;2.3&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="ss"&gt;:xxx&lt;/span&gt; &lt;span class="o"&gt;&amp;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;h3 id="启动web server"&gt;启动 web server&lt;/h3&gt;
&lt;p&gt;因为在 lib/lograge_service/railtie.rb 中指定了 development 环境不生效，所以需要以 production 来跑&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;puma &lt;span class="nt"&gt;-p&lt;/span&gt; 3000 &lt;span class="nt"&gt;-e&lt;/span&gt; production &lt;span class="nt"&gt;-t&lt;/span&gt; 32:32 &lt;span class="nt"&gt;-w&lt;/span&gt; 1
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="额外的代码"&gt;额外的代码&lt;/h3&gt;
&lt;p&gt;只需要在 config/application.rb 中引入 lib/lograge_service 即可：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;# [config/application.rb]&lt;/span&gt;
&lt;span class="o"&gt;...&lt;/span&gt;

&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="no"&gt;File&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;expand_path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'../../lib/lograge_service'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kp"&gt;__FILE__&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Require the gems listed in Gemfile, including any gems&lt;/span&gt;
&lt;span class="c1"&gt;# you've limited to :test, :development, or :production.&lt;/span&gt;
&lt;span class="no"&gt;Bundler&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="no"&gt;Rails&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;groups&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;module&lt;/span&gt; &lt;span class="nn"&gt;LogrageServiceDemo&lt;/span&gt;
  &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Application&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&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;Application&lt;/span&gt;
     &lt;span class="o"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="代码写得不好, 轻拍"&gt;代码写得不好，轻拍&lt;/h3&gt;</description>
      <author>zfjoy520</author>
      <pubDate>Wed, 23 Mar 2016 04:04:22 +0800</pubDate>
      <link>https://ruby-china.org/topics/29417</link>
      <guid>https://ruby-china.org/topics/29417</guid>
    </item>
    <item>
      <title>moonscript：看了一部分文档，老外真够懒的！</title>
      <description>&lt;p&gt;moonscript: A programmer friendly language that compiles to Lua.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://moonscript.org/" rel="nofollow" target="_blank"&gt;http://moonscript.org/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;MoonScript is a dynamic scripting language that compiles into Lua. It gives you the power of one of the fastest scripting languages combined with a rich set of features.&lt;/p&gt;

&lt;p&gt;最近在研究 lua。文档看了一大半。越往后看，越觉得地球人已经无法阻止该语言的发明者偷懒了。&lt;/p&gt;

&lt;p&gt;有兴趣的童鞋可以关注一下，只是稍稍有点不喜他这个靠严格缩进来支撑的逻辑。&lt;/p&gt;

&lt;p&gt;抄几句官网的 code：&lt;/p&gt;

&lt;p&gt;&lt;code&gt;func_a = -&amp;gt; for i=1,10 do i&lt;/code&gt;&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class Inventory
  new: =&amp;gt;
    @items = {}

  add_item: (name) =&amp;gt;
    if @items[name]
      @items[name] += 1
    else
      @items[name] = 1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;真心有点叼炸天的感觉。&lt;/p&gt;</description>
      <author>zfjoy520</author>
      <pubDate>Thu, 24 Apr 2014 15:45:59 +0800</pubDate>
      <link>https://ruby-china.org/topics/18823</link>
      <guid>https://ruby-china.org/topics/18823</guid>
    </item>
    <item>
      <title>一大早无聊。来发发没有参考价值的 benchmark</title>
      <description>&lt;p&gt;环境和测试结果与下面这个 github 上的兄弟基本一致，我的 mac mini 跑出来还要高一点点&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/luislavena/bench-micro" rel="nofollow" target="_blank"&gt;https://github.com/luislavena/bench-micro&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;抄一个过来。免得有人懒不想点过去&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Requests/sec

Framework            Requests/sec  % from best
----------------------------------------------
rack                      8808.74       100.0%
mustermann                7673.94       87.12%
cuba                      7550.91       85.72%
hobbit                    7447.90       84.55%
lotus-router              7346.17        83.4%
rack-response             6847.69       77.74%
brooklyn                  6513.61       73.94%
rambutan                  5991.08       68.01%
nancy                     5762.34       65.42%
nyny                      4111.48       46.68%
sinatra                   2879.52       32.69%
scorched                  1654.10       18.78%
ramaze                    1341.83       15.23%
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;当然，任何以 hello world 来跑的 benchmark 都是瞎扯蛋。&lt;/p&gt;

&lt;p&gt;但 lua 的 gin (&lt;a href="http://gin.io/" rel="nofollow" target="_blank"&gt;http://gin.io/&lt;/a&gt;) + openresty(&lt;a href="http://openresty.org/" rel="nofollow" target="_blank"&gt;http://openresty.org/&lt;/a&gt;)
即能跑 35K，还是让人觉得比较爽。&lt;/p&gt;

&lt;p&gt;因为 gin 是纯 json 的 framework，硬性规定 header 里头 Accept 的格式，有兴趣的可以关注一下：
&lt;a href="http://gin.io/docs/api_versioning.html" rel="nofollow" target="_blank"&gt;http://gin.io/docs/api_versioning.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;所以在用 wrk 跑的时候需要指定 header，配置文件如下：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#config.lua
wrk.headers["Accept"] = "application/vnd.xxxx.v100+json"
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;测试一：&lt;/strong&gt;
&lt;code&gt;返回定值json：{'hi': 'gin'}&lt;/code&gt;&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;wrk -t12 -c400 -d10s  http://127.0.0.1:7200 --script="config.lua"
Running 10s test @ http://127.0.0.1:7200
  12 threads and 400 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    11.64ms   12.63ms 149.18ms   91.22%
    Req/Sec     3.09k     0.95k   12.92k    84.73%
  355662 requests in 10.00s, 84.10MB read
  Socket errors: connect 0, read 201, write 0, timeout 0
  Non-2xx or 3xx responses: 355662
Requests/sec:  35561.76
Transfer/sec:      8.41MB
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;测试二：&lt;/strong&gt;
&lt;code&gt;一次ssdb get之后再返回定值json：{'hi': 'gin'}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;配合上 redis 或者是 ssdb(&lt;a href="http://www.ideawu.com/ssdb/zh_cn/" rel="nofollow" target="_blank"&gt;http://www.ideawu.com/ssdb/zh_cn/&lt;/a&gt;)。
带一个简单的 get 查询。效率低了不少。但感觉应该还是会比 rails，rack 这一类快上不少。&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;wrk -t12 -c400 -d10s  http://127.0.0.1:7200 --script="config.lua"
Running 10s test @ http://127.0.0.1:7200
  12 threads and 400 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    50.77ms   46.63ms 119.63ms   48.43%
    Req/Sec     1.70k     0.94k    7.00k    79.68%
  163995 requests in 10.00s, 32.05MB read
  Socket errors: connect 0, read 403, write 0, timeout 0
Requests/sec:  16399.01
Transfer/sec:      3.21MB
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;16K，是带了一个 ssdb get 的，返回值还是 json 的一个 benchmark 哟。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;说到最后。其实我是来打广告的&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ssdb: &lt;a href="http://www.ideawu.com/ssdb/zh_cn/" rel="nofollow" target="_blank"&gt;http://www.ideawu.com/ssdb/zh_cn/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;gin: &lt;a href="http://gin.io/" rel="nofollow" target="_blank"&gt;http://gin.io/&lt;/a&gt; --  一个基于 lua 的 JSON-API framework，做 web service 不错&lt;/p&gt;

&lt;p&gt;openresty：&lt;a href="http://openresty.org/" rel="nofollow" target="_blank"&gt;http://openresty.org/&lt;/a&gt;  -- a fast web app server by extending nginx&lt;/p&gt;

&lt;p&gt;有兴趣的童鞋可以关注一下。&lt;/p&gt;</description>
      <author>zfjoy520</author>
      <pubDate>Thu, 24 Apr 2014 09:38:35 +0800</pubDate>
      <link>https://ruby-china.org/topics/18812</link>
      <guid>https://ruby-china.org/topics/18812</guid>
    </item>
    <item>
      <title>[Rainbows] 论坛里有大大在用这个么？今天测试的时候内存暴涨几十 G。</title>
      <description>&lt;p&gt;硬件：
24 线，48G 内存。&lt;/p&gt;

&lt;p&gt;环境：
centos6 + ruby 2.1 + rails4 + nginx +rainbows&lt;/p&gt;

&lt;p&gt;rainbows.rb 配置文件：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;worker_processes 24
worker_connections 16
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;在简单的并发测试，内存占用由 2G，几分钟之后暴涨至 40G&lt;/p&gt;

&lt;p&gt;对比之前一直在用的 unicorn，unicorn 有 workerkiller，所以内存一直处于比较稳定的状态。&lt;/p&gt;

&lt;p&gt;请问，是不是需要额外配置一些参数来控制 Rainbows 的内存占用？&lt;/p&gt;</description>
      <author>zfjoy520</author>
      <pubDate>Fri, 21 Mar 2014 16:30:56 +0800</pubDate>
      <link>https://ruby-china.org/topics/18072</link>
      <guid>https://ruby-china.org/topics/18072</guid>
    </item>
    <item>
      <title>这是一个 BUG 么？头像上传之后，之前同一 ID 的头像图片还在。</title>
      <description>&lt;p&gt;，刚改了个头像。&lt;/p&gt;

&lt;p&gt;新头像地址：
&lt;code&gt;//l.ruby-china.com/user/big_avatar/958.png&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;旧头像地址：
&lt;code&gt;//l.ruby-china.com/user/big_avatar/958.jpg&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;新头像原图是 png，旧头像原图是 jpg，是因为后缀名不一样，而导致 958 这个编号文件没被覆盖，还是说本身就是这种设计？&lt;/p&gt;</description>
      <author>zfjoy520</author>
      <pubDate>Thu, 05 Sep 2013 18:31:53 +0800</pubDate>
      <link>https://ruby-china.org/topics/13906</link>
      <guid>https://ruby-china.org/topics/13906</guid>
    </item>
    <item>
      <title>生命在于折腾！谈一谈我这个 MAC 盲的 10 小时成长历程。</title>
      <description>&lt;p&gt;职业：Ruby 服务器开发&lt;/p&gt;

&lt;p&gt;背景：公司有个闲置的 mac mini，想尝试一下&lt;/p&gt;

&lt;p&gt;SO：&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;前天&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;前天下午下班的时候拿到的 mini，接上几大线，开机。听他们管事的说，要把系统内的数据清掉（因为之前有人用过这个 mini）。&lt;/p&gt;

&lt;p&gt;so，google 一下，大致看了下，是硬盘抹掉，然后重装。
so，果断开机，“磁盘工具” -&amp;gt; “Macintosh HD” -&amp;gt; "抹掉" -&amp;gt; “重启”。&lt;/p&gt;

&lt;p&gt;然后，众所周知的，然后，重启之后，没系统了，果断灰屏，闪问号。&lt;/p&gt;

&lt;p&gt;之所以抹掉，只因进“磁盘工具”后，花了 0.5 秒时间，瞟了一眼，看他貌似除了这个“Macintosh HD”之外，还有个啥系统区之类的，便误以为会像某些高级系统一样，有个隐藏分区，内置原始系统，可一键重装。&lt;/p&gt;

&lt;p&gt;然后，没系统了。身边 mac 系统的兄弟都下班了，我只有 win7 机。然后 google，说 win7 下，也可制作 U 盘安装盘，于是，拿出天天带身上的 8G mini U 盘。&lt;/p&gt;

&lt;p&gt;花了半小时时间，网上搞了个 10.8.4 dmg
花了 20 分钟写好了第一个启动盘，插上，开机 option，找不到 U 盘&lt;/p&gt;

&lt;p&gt;再 google，有人说 U 盘格式不对，不能是 ntfs，果断格成 fat32，redo 以上 20 分钟的事。&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sleep(20.minutes)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;插上，无果&lt;/p&gt;

&lt;p&gt;so，关机，回家。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;第二天，也就是昨天&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;托有 mac 机的同事再 redo 前一天的 20 分钟的事，不过用的不是我自己下载的那个 dmg，最后 1% 报错。google 一下，说是能用。&lt;/p&gt;

&lt;p&gt;so，插上，开机 option，U 盘出来了，可，onclick =&amp;gt; 带左斜线的灰圈，禁止符果断跳了出来。无果，找同事再找了个 8G U 盘，无果。&lt;/p&gt;

&lt;p&gt;中午，叫旁边的 mac 哥们，用头天下载下来的的 4.* G 的 dmg 重新搞了个。插上，果断 OK 了。&lt;/p&gt;

&lt;p&gt;一路顺利，连 next 都不带一个。&lt;/p&gt;

&lt;p&gt;然后是&lt;code&gt;sleep(25.minutes)&lt;/code&gt;。系统装好了，重启。&lt;/p&gt;

&lt;p&gt;0 基础学 MAC 正式开始。&lt;/p&gt;

&lt;p&gt;先是装了个 QQ，没 QQ 可不行。&lt;/p&gt;

&lt;p&gt;再是装了个迅雷，MAC 下想充分利用公司 2.5M/S 的下载速度，没迅雷可不行&lt;/p&gt;

&lt;p&gt;然后是，装 chrome，没 chrome 都不好意思跟别个打招呼。&lt;/p&gt;

&lt;p&gt;然后是，&lt;code&gt;xcode，versions(用了svn)，git，sublime text 2，netbeans，iTerm 2，office for mac 2011，ForkLift&lt;/code&gt;（ftp 有时会用到，比如：新版本不敢部署，因为变动太大，但需要修改测试服上的旧有版本的某些东西时），Sequel Pro 也装一个，虽然已经好几年没用过 GUI 的 Mysql 管理工具了，早就习惯了代码方式，然后是 BetterZip，SourceTree&lt;/p&gt;

&lt;p&gt;然后再是 &lt;code&gt;ruby, mysql, redis&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;虽然 mac 有预装 ruby，但不买帐。看好多大牛都用 rvm 装，但个人对多版本 ruby 没兴趣，工作上也几乎用不着。
线上项目的 ruby 版本，除非有重大漏洞，一般不会升级。所以找到预装的版本，位置：&lt;code&gt;/System/Library/Frameworks/Ruby.framework/Versions&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;果断把那个软链“Current”干掉之。因为/usr/bin 目录下，链接了 ruby,irb,ri,rdoc,rake,testrt 等一系列的执行文件到这个 Current&lt;/p&gt;

&lt;p&gt;自己下了个 1.9.3 p****源码，编译之。&lt;/p&gt;

&lt;p&gt;发现 error，没 c 编译器，于是 google，xcode command line 果断安装之&lt;/p&gt;

&lt;p&gt;再编译，过！&lt;/p&gt;

&lt;p&gt;果断 &lt;code&gt;sudo vim /etc/profile&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;export PATH="$PATH:/usr/local/ruby/bin:/usr/local/mysql/bin"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;当然，后面那个 mysql 的是后面装了 mysql 才加上的。&lt;/p&gt;

&lt;p&gt;然后是&lt;code&gt;gem install bundler --no-ri --no-rdoc&lt;/code&gt;
然后是&lt;code&gt;bundle install&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;发现提示 libyaml 没装。然后把装好的 ruby 删了。解压出来的文件夹也删了&lt;/p&gt;

&lt;p&gt;&lt;code&gt;brew install libyaml&lt;/code&gt;，发现没有 brew，然后 google，然后装了个 homebrew&lt;/p&gt;

&lt;p&gt;重编 ruby，重来&lt;/p&gt;

&lt;p&gt;然后是 bundle install，卡 mysql2，果断
&lt;code&gt;sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;继续往下走。全过&lt;/p&gt;

&lt;p&gt;然后是改 mysql 默认编码，因为 mysql 几乎不用，平时都在用 redis，mysql 只用做日志流、统计时用。&lt;/p&gt;

&lt;p&gt;cp 了一份 my.cnf 到/etc 下。简单写了几行&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[mysql]
default-character-set=utf8

[mysqld]
character-set-server=utf8
default-storage-engine=MyISAM
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;因为是自己的开发机、也很少用到 mysql，就懒得去重新设置日志目录，数据目录。&lt;/p&gt;

&lt;p&gt;mysql 完事了，然后是 redis，&lt;/p&gt;

&lt;p&gt;redis 的安装几乎可以忽略&lt;/p&gt;

&lt;p&gt;最后，为什么选择 iTerm 2 呢。仅因为他有一个特殊功能，“鼠标选中即复制”，解放生产力的好东西&lt;/p&gt;

&lt;p&gt;然后是做点 bash 下的重命名：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo vim ~/.bash_profile

alias c='/usr/local/ruby/bin/rails c'
alias s='/usr/local/ruby/bin/rails s'
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;一个 c，一个 s 就能进到控制台，或是启个 server，能解放生产力，何不为之！&lt;/p&gt;

&lt;p&gt;之前也尝试过手动编译安装 mysql，可坑爹，到然后发现 mac 上，没有 groupadd mysql 这个东东，简单查了一下。麻烦，算了，pass，选择了 mysql.dmg&lt;/p&gt;

&lt;p&gt;之所以选择 netbeans 这个 IDE，只为看上他的一个功能，点方法名，可快速跳转到源码&lt;/p&gt;

&lt;p&gt;然后猛然发现，sublime text 2，下的 super 和 netbeans 的 meta 键。其实就是所谓的 win7 键。用不习惯。。。果断将 control 和 command 互换。&lt;/p&gt;

&lt;p&gt;然后试着 git clone，发现没权限&lt;/p&gt;

&lt;p&gt;发现～下面默认不带.ssh 目录，果断 ssh-keygen -t rsa，一路回车，再把生成的文件全删了。&lt;/p&gt;

&lt;p&gt;copy 一份之前 win7 机器下的 id_rsa id_rsa.pub 过来。&lt;/p&gt;

&lt;p&gt;git clone 成功。&lt;/p&gt;

&lt;p&gt;然后果断 OK 了。&lt;/p&gt;

&lt;p&gt;装了个 QQ 输入法，因为带五笔，对拼音不好的川人，五笔是个不错的选择。&lt;/p&gt;

&lt;p&gt;一只巨型 MAC 菜鸟完成了从 0 -&amp;gt; 0.1 的蜕变。&lt;/p&gt;

&lt;p&gt;&lt;code&gt;中间，好些软件，纯破解版，切误模仿。如有需要请购买正版。&lt;/code&gt;&lt;/p&gt;</description>
      <author>zfjoy520</author>
      <pubDate>Fri, 21 Jun 2013 16:09:05 +0800</pubDate>
      <link>https://ruby-china.org/topics/11876</link>
      <guid>https://ruby-china.org/topics/11876</guid>
    </item>
    <item>
      <title>离职正好一周了，刚发了第一份求职信</title>
      <description>&lt;p&gt;离职正好一周了，刚发了第一份求职信，希望他们公司还在招 RoR，也希望 HR 大神能扫到我的简历，祈祷 ing~！！！地点在成都。呵呵。&lt;/p&gt;</description>
      <author>zfjoy520</author>
      <pubDate>Tue, 13 Nov 2012 23:55:59 +0800</pubDate>
      <link>https://ruby-china.org/topics/6743</link>
      <guid>https://ruby-china.org/topics/6743</guid>
    </item>
    <item>
      <title>分享最近服务器迁移遇到的一个怪问题 (REE + passenger + nginx)</title>
      <description>&lt;p&gt;最近这几天在搞服务器迁移，在配置新机器环境的时候遇到个怪问题：
REE 不能安装到服务器的除系统盘之外的挂载分区上，否则会造成 passenger 的进程卡死。重启一次 nginx。只能访问一次，第二次开始便会卡死。&lt;/p&gt;

&lt;p&gt;个中原因，没时间去深究。之前不知道有这个原因，所以昨天折腾了一天，换 nginx 版本，换 rails 版本，找 passenger 版本，均不得其果。今天上午，想到把 ruby 装回那 10 个 G 的系统分区上试试。果然。一切 OK 了。。&lt;/p&gt;

&lt;p&gt;个中原因，还盼高手出来解答。。  &lt;/p&gt;</description>
      <author>zfjoy520</author>
      <pubDate>Wed, 27 Jun 2012 18:06:57 +0800</pubDate>
      <link>https://ruby-china.org/topics/4016</link>
      <guid>https://ruby-china.org/topics/4016</guid>
    </item>
  </channel>
</rss>
