<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>noob (noob)</title>
    <link>https://ruby-china.org/noob</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>Thread.current 是否保证对一个响应可用且私有吗？</title>
      <description>&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;current_user&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;kite_verify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;token&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;xxxx&lt;/span&gt; &lt;span class="c1"&gt;# 小程序&lt;/span&gt;

   &lt;span class="n"&gt;verify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;token&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="k"&gt;raise&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;ActionController&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;InvalidAuthenticityToken&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'UnauthorizedError'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# web页面登陆&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;kite_verify&lt;/span&gt;
    &lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;解析token获取id&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_by&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;id: &lt;/span&gt;&lt;span class="nb"&gt;id&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;def&lt;/span&gt; &lt;span class="nf"&gt;verify&lt;/span&gt;
    &lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;company&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;解析token获取id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;company&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_by&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;id: &lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="no"&gt;Thread&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;current&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:company&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;company&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="n"&gt;接口&lt;/span&gt;&lt;span class="err"&gt;：&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nb"&gt;test&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;company&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;company&lt;/span&gt;
  &lt;span class="n"&gt;render&lt;/span&gt; &lt;span class="ss"&gt;json: &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="ss"&gt;company:  &lt;/span&gt;&lt;span class="no"&gt;Thread&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;current&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:company&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;出现状况：同一个用户 id，小程序登陆，web 登陆不同公司的登陆，小程序能获取到 Thread.current[:company] 的值。&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;小程序打印出的Thread.current： &amp;lt;Thread:0x00000001049de928@puma threadpool 001  xxx&amp;gt;
web页面登录打印出的Thread.current ： &amp;lt;Thread:0x00000001049bfa78@puma threadpool 003  xxxx&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;请教一下具体什么原因&lt;/p&gt;</description>
      <author>noob</author>
      <pubDate>Tue, 17 Oct 2023 19:40:00 +0800</pubDate>
      <link>https://ruby-china.org/topics/43400</link>
      <guid>https://ruby-china.org/topics/43400</guid>
    </item>
    <item>
      <title>gem install  mysql2 报错：Make sure that `gem install mysql2 -v '0.3.20' --source 'https://rubygems.org/'` succeeds before bundling.</title>
      <description>&lt;h4 id="本机信息"&gt;本机信息&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Mac 10.1.4.4&lt;/li&gt;
&lt;li&gt;ruby 2.3.1&lt;/li&gt;
&lt;li&gt;mysql 已安装  服务已启动&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="报错信息"&gt;报错信息&lt;/h4&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;Fetching mysql2 0.3.20
Installing mysql2 0.3.20 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
client.c:367:33: warning: implicit conversion loses integer precision: &lt;span class="s1"&gt;'long'&lt;/span&gt; to &lt;span class="s1"&gt;'unsigned int'&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;-Wshorten-64-to-32&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
        elapsed_time &lt;span class="o"&gt;=&lt;/span&gt; end_time - start_time&lt;span class="p"&gt;;&lt;/span&gt;
                     ~ ~~~~~~~~~^~~~~~~~~~~~
client.c:439:3: error: use of undeclared identifier &lt;span class="s1"&gt;'my_bool'&lt;/span&gt;
  my_bool res &lt;span class="o"&gt;=&lt;/span&gt; mysql_read_query_result&lt;span class="o"&gt;(&lt;/span&gt;client&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  ^
client.c:441:19: error: use of undeclared identifier &lt;span class="s1"&gt;'res'&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;void &lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="o"&gt;)(&lt;/span&gt;res &lt;span class="o"&gt;==&lt;/span&gt; 0 ? Qtrue : Qfalse&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                  ^
client.c:775:3: error: use of undeclared identifier &lt;span class="s1"&gt;'my_bool'&lt;/span&gt;
  my_bool boolval&lt;span class="p"&gt;;&lt;/span&gt;
  ^
client.c:806:7: error: use of undeclared identifier &lt;span class="s1"&gt;'boolval'&lt;/span&gt;
      boolval &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;value &lt;span class="o"&gt;==&lt;/span&gt; Qfalse ? 0 : 1&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      ^
client.c:807:17: error: use of undeclared identifier &lt;span class="s1"&gt;'boolval'&lt;/span&gt;
      retval &lt;span class="o"&gt;=&lt;/span&gt; &amp;amp;boolval&lt;span class="p"&gt;;&lt;/span&gt;
                ^
client.c:810:10: error: use of undeclared identifier &lt;span class="s1"&gt;'MYSQL_SECURE_AUTH'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; did you mean &lt;span class="s1"&gt;'MYSQL_DEFAULT_AUTH'&lt;/span&gt;?
    &lt;span class="k"&gt;case&lt;/span&gt; MYSQL_SECURE_AUTH:
         ^~~~~~~~~~~~~~~~~
         MYSQL_DEFAULT_AUTH
/usr/local/Cellar/mysql/8.0.15/include/mysql/mysql.h:188:3: note: &lt;span class="s1"&gt;'MYSQL_DEFAULT_AUTH'&lt;/span&gt; declared here
  MYSQL_DEFAULT_AUTH,
  ^
client.c:811:7: error: use of undeclared identifier &lt;span class="s1"&gt;'boolval'&lt;/span&gt;
      boolval &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;value &lt;span class="o"&gt;==&lt;/span&gt; Qfalse ? 0 : 1&lt;span class="p"&gt;);&lt;/span&gt;
      ^
client.c:812:17: error: use of undeclared identifier &lt;span class="s1"&gt;'boolval'&lt;/span&gt;
      retval &lt;span class="o"&gt;=&lt;/span&gt; &amp;amp;boolval&lt;span class="p"&gt;;&lt;/span&gt;
                ^
client.c:843:38: error: use of undeclared identifier &lt;span class="s1"&gt;'boolval'&lt;/span&gt;
        wrapper-&amp;gt;reconnect_enabled &lt;span class="o"&gt;=&lt;/span&gt; boolval&lt;span class="p"&gt;;&lt;/span&gt;
                                     ^
client.c:1165:56: warning: implicit conversion loses integer precision: &lt;span class="s1"&gt;'size_t'&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;aka &lt;span class="s1"&gt;'unsigned long'&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; to &lt;span class="s1"&gt;'unsigned int'&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;-Wshorten-64-to-32&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
  mysql2rb &lt;span class="o"&gt;=&lt;/span&gt; mysql2_mysql_enc_name_to_rb&lt;span class="o"&gt;(&lt;/span&gt;charset_name, charset_name_len&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
             ~~~~~~~~~~~~~~~~~~~~~~~~~~~               ^~~~~~~~~~~~~~~~
client.c:1198:38: error: use of undeclared identifier &lt;span class="s1"&gt;'MYSQL_SECURE_AUTH'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; did you mean &lt;span class="s1"&gt;'MYSQL_DEFAULT_AUTH'&lt;/span&gt;?
  &lt;span class="k"&gt;return &lt;/span&gt;_mysql_client_options&lt;span class="o"&gt;(&lt;/span&gt;self, MYSQL_SECURE_AUTH, value&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                                     ^~~~~~~~~~~~~~~~~
                                     MYSQL_DEFAULT_AUTH
/usr/local/Cellar/mysql/8.0.15/include/mysql/mysql.h:188:3: note: &lt;span class="s1"&gt;'MYSQL_DEFAULT_AUTH'&lt;/span&gt; declared here
  MYSQL_DEFAULT_AUTH,
  ^
2 warnings and 10 errors generated.
make: &lt;span class="k"&gt;***&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;client.o] Error 1

make failed, &lt;span class="nb"&gt;exit &lt;/span&gt;code 2

Gem files will remain installed &lt;span class="k"&gt;in&lt;/span&gt; /Users/apple/.rvm/gems/ruby-2.3.1/gems/mysql2-0.3.20 &lt;span class="k"&gt;for &lt;/span&gt;inspection.
Results logged to /Users/apple/.rvm/gems/ruby-2.3.1/extensions/x86_64-darwin-18/2.3.0/mysql2-0.3.20/gem_make.out

An error occurred &lt;span class="k"&gt;while &lt;/span&gt;installing mysql2 &lt;span class="o"&gt;(&lt;/span&gt;0.3.20&lt;span class="o"&gt;)&lt;/span&gt;, and Bundler cannot &lt;span class="k"&gt;continue&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;
Make sure that &lt;span class="sb"&gt;`&lt;/span&gt;gem &lt;span class="nb"&gt;install &lt;/span&gt;mysql2 &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="s1"&gt;'0.3.20'&lt;/span&gt; &lt;span class="nt"&gt;--source&lt;/span&gt; &lt;span class="s1"&gt;'https://rubygems.org/'&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt; succeeds before bundling.

In Gemfile:
  mysql2
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id="参考信息"&gt;参考信息&lt;/h4&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;unlink &lt;/span&gt;mysql
brew cleanup
brew &lt;span class="nb"&gt;install &lt;/span&gt;mysql
gem &lt;span class="nb"&gt;install &lt;/span&gt;mysql2
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;不起作用
前辈们有没有遇到这种情况，求助&lt;/p&gt;</description>
      <author>noob</author>
      <pubDate>Sat, 13 Apr 2019 21:01:19 +0800</pubDate>
      <link>https://ruby-china.org/topics/38401</link>
      <guid>https://ruby-china.org/topics/38401</guid>
    </item>
    <item>
      <title>执行 bundle install 报错： Could not load OpenSSL.</title>
      <description>&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2019/95c50a89-a179-46e0-abbc-a6ccc79a3b79.png!large" title="" alt=""&gt;&lt;/p&gt;
&lt;h4 id="本级版本以及ruby版本"&gt;本级版本以及 ruby 版本&lt;/h4&gt;
&lt;p&gt;Mac 10.14.4
ruby 2.3.1
openssl 已安装&lt;/p&gt;
&lt;h4 id="报错具体信息"&gt;报错具体信息&lt;/h4&gt;
&lt;p&gt;执行 bundle install 错误信息：&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;bundle &lt;span class="nb"&gt;install           
&lt;/span&gt;Could not load OpenSSL.
You must recompile Ruby with OpenSSL support or change the sources &lt;span class="k"&gt;in &lt;/span&gt;your Gemfile from &lt;span class="s1"&gt;'https'&lt;/span&gt; to &lt;span class="s1"&gt;'http'&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt; Instructions &lt;span class="k"&gt;for &lt;/span&gt;compiling with OpenSSL using RVM are available at rvm.io/packages/openssl.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;按着提示信息将 https 更改为 http 不起作用，使用 source '&lt;a href="https://gems.ruby-china.com" rel="nofollow" target="_blank"&gt;https://gems.ruby-china.com&lt;/a&gt;' 也不起作用&lt;/p&gt;
&lt;h4 id="参考的连接"&gt;参考的连接&lt;/h4&gt;
&lt;p&gt;&lt;a href="https://github.com/rbenv/ruby-build/issues/197" rel="nofollow" target="_blank" title=""&gt;issues_197&lt;/a&gt;
也不起作用&lt;/p&gt;

&lt;p&gt;各位有遇到这种情况是怎么解决的，求助，折腾一天了，还没解决&lt;/p&gt;</description>
      <author>noob</author>
      <pubDate>Sat, 13 Apr 2019 20:10:10 +0800</pubDate>
      <link>https://ruby-china.org/topics/38400</link>
      <guid>https://ruby-china.org/topics/38400</guid>
    </item>
    <item>
      <title>这样设计合理吗</title>
      <description>&lt;ol&gt;
&lt;li&gt;&lt;p&gt;一个数据表中 50 多个字段，合理吗？&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;表中明明有关联字段，还要存很多关联表中的其他字段，说是为了查询方便，合理吗？&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;</description>
      <author>noob</author>
      <pubDate>Tue, 04 Sep 2018 15:04:00 +0800</pubDate>
      <link>https://ruby-china.org/topics/37435</link>
      <guid>https://ruby-china.org/topics/37435</guid>
    </item>
    <item>
      <title>已解决 Rails transaction 引起 MySQL 死锁问题</title>
      <description>&lt;h3 id="问题截图"&gt;问题截图&lt;/h3&gt;
&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2016/8ec03f3251bbd82ca26b5811efdc112b.png" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;出现问题之后：在 mysql shell 中执行 insert into  fin_user_accounts(xx,xx,xx) values(xx,xx,xx)。&lt;/p&gt;
&lt;h3 id="返回错误信息： Lock wait timeout exceeded; try restarting transaction"&gt;返回错误信息：Lock wait timeout exceeded; try restarting transaction&lt;/h3&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;create_account&lt;/span&gt; &lt;span class="n"&gt;profile&lt;/span&gt;
  &lt;span class="no"&gt;Fin&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;UserAccount&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;transaction&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
    &lt;span class="c1"&gt;# 创建资金账号&lt;/span&gt;
    &lt;span class="n"&gt;ua&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Fin&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;UserAccount&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create_account&lt;/span&gt; &lt;span class="n"&gt;profile&lt;/span&gt;
    &lt;span class="c1"&gt;# 更新会员关联表的ID&lt;/span&gt;
    &lt;span class="n"&gt;profile&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;update_user_account_id&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ua&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;id&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="c1"&gt;# 如果还没有资金账户，创建资金账户&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;profile&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;user_account_id&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;nil?&lt;/span&gt;
    &lt;span class="n"&gt;fin_account_service&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;UserFinAccountService&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;fin_account_service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;request&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="vi"&gt;@request&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;fin_account_service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create_account&lt;/span&gt; &lt;span class="n"&gt;profile&lt;/span&gt;
      &lt;span class="n"&gt;charge_request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;errors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add_to_base&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"创建资金账户失败。"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;order&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;order&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;user_account_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;profile&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;user_account_id&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;之前直接在数据库中添加了一条资金账号数据但并没有更新对应的会员表数据，之后再进行充值时，会报上图出现错误，便手动在数据库中把会员表中的数据更新，暂时解决。
但是之后使用新用户有出现同样问题。&lt;/p&gt;

&lt;p&gt;查询了：show processlist;
+---------------+--------+-------------------------------------------------------------------------+
| command  | state       |                                         info                                        |
+---------------+-----------  +---------------------------------------------------------------------+
|   QUERY      | UPDATE | insert into  fin_user_accounts(xx,xx,xx) values(xx,xx,xx) |
+---------+-----+-------+---------------------------------------------------------------------------+
（猜想是否程序还在等待  &lt;strong&gt;profile.update_user_account_id(ua.id)&lt;/strong&gt;操作）&lt;/p&gt;
&lt;h3 id="show innodb status"&gt;show innodb status&lt;/h3&gt;&lt;pre class="highlight conf"&gt;&lt;code&gt;*************************** &lt;span class="m"&gt;1&lt;/span&gt;. &lt;span class="n"&gt;row&lt;/span&gt; ***************************
  &lt;span class="n"&gt;Type&lt;/span&gt;: &lt;span class="n"&gt;InnoDB&lt;/span&gt;
  &lt;span class="n"&gt;Name&lt;/span&gt;: 
&lt;span class="n"&gt;Status&lt;/span&gt;: 
=====================================
&lt;span class="m"&gt;160618&lt;/span&gt; &lt;span class="m"&gt;11&lt;/span&gt;:&lt;span class="m"&gt;42&lt;/span&gt;:&lt;span class="m"&gt;40&lt;/span&gt; &lt;span class="n"&gt;INNODB&lt;/span&gt; &lt;span class="n"&gt;MONITOR&lt;/span&gt; &lt;span class="n"&gt;OUTPUT&lt;/span&gt;
=====================================
&lt;span class="n"&gt;Per&lt;/span&gt; &lt;span class="n"&gt;second&lt;/span&gt; &lt;span class="n"&gt;averages&lt;/span&gt; &lt;span class="n"&gt;calculated&lt;/span&gt; &lt;span class="n"&gt;from&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;last&lt;/span&gt; &lt;span class="m"&gt;46&lt;/span&gt; &lt;span class="n"&gt;seconds&lt;/span&gt;
----------
&lt;span class="n"&gt;SEMAPHORES&lt;/span&gt;
----------
&lt;span class="n"&gt;OS&lt;/span&gt; &lt;span class="n"&gt;WAIT&lt;/span&gt; &lt;span class="n"&gt;ARRAY&lt;/span&gt; &lt;span class="n"&gt;INFO&lt;/span&gt;: &lt;span class="n"&gt;reservation&lt;/span&gt; &lt;span class="n"&gt;count&lt;/span&gt; &lt;span class="m"&gt;3022&lt;/span&gt;, &lt;span class="n"&gt;signal&lt;/span&gt; &lt;span class="n"&gt;count&lt;/span&gt; &lt;span class="m"&gt;3022&lt;/span&gt;
&lt;span class="n"&gt;Mutex&lt;/span&gt; &lt;span class="n"&gt;spin&lt;/span&gt; &lt;span class="n"&gt;waits&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;, &lt;span class="n"&gt;rounds&lt;/span&gt; &lt;span class="m"&gt;15701&lt;/span&gt;, &lt;span class="n"&gt;OS&lt;/span&gt; &lt;span class="n"&gt;waits&lt;/span&gt; &lt;span class="m"&gt;8&lt;/span&gt;
&lt;span class="n"&gt;RW&lt;/span&gt;-&lt;span class="n"&gt;shared&lt;/span&gt; &lt;span class="n"&gt;spins&lt;/span&gt; &lt;span class="m"&gt;6958&lt;/span&gt;, &lt;span class="n"&gt;OS&lt;/span&gt; &lt;span class="n"&gt;waits&lt;/span&gt; &lt;span class="m"&gt;3009&lt;/span&gt;; &lt;span class="n"&gt;RW&lt;/span&gt;-&lt;span class="n"&gt;excl&lt;/span&gt; &lt;span class="n"&gt;spins&lt;/span&gt; &lt;span class="m"&gt;5&lt;/span&gt;, &lt;span class="n"&gt;OS&lt;/span&gt; &lt;span class="n"&gt;waits&lt;/span&gt; &lt;span class="m"&gt;5&lt;/span&gt;
------------
&lt;span class="n"&gt;TRANSACTIONS&lt;/span&gt;
------------
&lt;span class="n"&gt;Trx&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="n"&gt;counter&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;29446433&lt;/span&gt;
&lt;span class="n"&gt;Purge&lt;/span&gt; &lt;span class="n"&gt;done&lt;/span&gt; &lt;span class="n"&gt;for&lt;/span&gt; &lt;span class="n"&gt;trx&lt;/span&gt;&lt;span class="err"&gt;'&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;:&lt;span class="n"&gt;o&lt;/span&gt; &amp;lt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;29446407&lt;/span&gt; &lt;span class="n"&gt;undo&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;:&lt;span class="n"&gt;o&lt;/span&gt; &amp;lt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
&lt;span class="n"&gt;History&lt;/span&gt; &lt;span class="n"&gt;list&lt;/span&gt; &lt;span class="n"&gt;length&lt;/span&gt; &lt;span class="m"&gt;40&lt;/span&gt;
&lt;span class="n"&gt;LIST&lt;/span&gt; &lt;span class="n"&gt;OF&lt;/span&gt; &lt;span class="n"&gt;TRANSACTIONS&lt;/span&gt; &lt;span class="n"&gt;FOR&lt;/span&gt; &lt;span class="n"&gt;EACH&lt;/span&gt; &lt;span class="n"&gt;SESSION&lt;/span&gt;:
---&lt;span class="n"&gt;TRANSACTION&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;, &lt;span class="n"&gt;not&lt;/span&gt; &lt;span class="n"&gt;started&lt;/span&gt;, &lt;span class="n"&gt;process&lt;/span&gt; &lt;span class="n"&gt;no&lt;/span&gt; &lt;span class="m"&gt;2687&lt;/span&gt;, &lt;span class="n"&gt;OS&lt;/span&gt; &lt;span class="n"&gt;thread&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="m"&gt;2708777872&lt;/span&gt;
&lt;span class="n"&gt;MySQL&lt;/span&gt; &lt;span class="n"&gt;thread&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="m"&gt;19282&lt;/span&gt;, &lt;span class="n"&gt;query&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="m"&gt;133303&lt;/span&gt; &lt;span class="n"&gt;localhost&lt;/span&gt; &lt;span class="n"&gt;root&lt;/span&gt;
&lt;span class="n"&gt;show&lt;/span&gt; &lt;span class="n"&gt;innodb&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt;
---&lt;span class="n"&gt;TRANSACTION&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;, &lt;span class="n"&gt;not&lt;/span&gt; &lt;span class="n"&gt;started&lt;/span&gt;, &lt;span class="n"&gt;process&lt;/span&gt; &lt;span class="n"&gt;no&lt;/span&gt; &lt;span class="m"&gt;2687&lt;/span&gt;, &lt;span class="n"&gt;OS&lt;/span&gt; &lt;span class="n"&gt;thread&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="m"&gt;2767657872&lt;/span&gt;
&lt;span class="n"&gt;MySQL&lt;/span&gt; &lt;span class="n"&gt;thread&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="m"&gt;19278&lt;/span&gt;, &lt;span class="n"&gt;query&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="m"&gt;132619&lt;/span&gt; &lt;span class="m"&gt;127&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="n"&gt;root&lt;/span&gt;
---&lt;span class="n"&gt;TRANSACTION&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;, &lt;span class="n"&gt;not&lt;/span&gt; &lt;span class="n"&gt;started&lt;/span&gt;, &lt;span class="n"&gt;process&lt;/span&gt; &lt;span class="n"&gt;no&lt;/span&gt; &lt;span class="m"&gt;2687&lt;/span&gt;, &lt;span class="n"&gt;OS&lt;/span&gt; &lt;span class="n"&gt;thread&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="m"&gt;2764352400&lt;/span&gt;
&lt;span class="n"&gt;MySQL&lt;/span&gt; &lt;span class="n"&gt;thread&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="m"&gt;19266&lt;/span&gt;, &lt;span class="n"&gt;query&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="m"&gt;133301&lt;/span&gt; &lt;span class="m"&gt;127&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="n"&gt;root&lt;/span&gt;
---&lt;span class="n"&gt;TRANSACTION&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;29446432&lt;/span&gt;, &lt;span class="n"&gt;not&lt;/span&gt; &lt;span class="n"&gt;started&lt;/span&gt;, &lt;span class="n"&gt;process&lt;/span&gt; &lt;span class="n"&gt;no&lt;/span&gt; &lt;span class="m"&gt;2687&lt;/span&gt;, &lt;span class="n"&gt;OS&lt;/span&gt; &lt;span class="n"&gt;thread&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="m"&gt;2764553104&lt;/span&gt;
&lt;span class="n"&gt;MySQL&lt;/span&gt; &lt;span class="n"&gt;thread&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="m"&gt;19263&lt;/span&gt;, &lt;span class="n"&gt;query&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="m"&gt;133302&lt;/span&gt; &lt;span class="m"&gt;127&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="n"&gt;root&lt;/span&gt;
---&lt;span class="n"&gt;TRANSACTION&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;, &lt;span class="n"&gt;not&lt;/span&gt; &lt;span class="n"&gt;started&lt;/span&gt;, &lt;span class="n"&gt;process&lt;/span&gt; &lt;span class="n"&gt;no&lt;/span&gt; &lt;span class="m"&gt;2687&lt;/span&gt;, &lt;span class="n"&gt;OS&lt;/span&gt; &lt;span class="n"&gt;thread&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="m"&gt;2764954512&lt;/span&gt;
&lt;span class="n"&gt;MySQL&lt;/span&gt; &lt;span class="n"&gt;thread&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="m"&gt;19259&lt;/span&gt;, &lt;span class="n"&gt;query&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="m"&gt;132249&lt;/span&gt; &lt;span class="m"&gt;127&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="n"&gt;root&lt;/span&gt;
---&lt;span class="n"&gt;TRANSACTION&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;29446426&lt;/span&gt;, &lt;span class="n"&gt;not&lt;/span&gt; &lt;span class="n"&gt;started&lt;/span&gt;, &lt;span class="n"&gt;process&lt;/span&gt; &lt;span class="n"&gt;no&lt;/span&gt; &lt;span class="m"&gt;2687&lt;/span&gt;, &lt;span class="n"&gt;OS&lt;/span&gt; &lt;span class="n"&gt;thread&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="m"&gt;2708978576&lt;/span&gt;
&lt;span class="n"&gt;MySQL&lt;/span&gt; &lt;span class="n"&gt;thread&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="m"&gt;19257&lt;/span&gt;, &lt;span class="n"&gt;query&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="m"&gt;132791&lt;/span&gt; &lt;span class="m"&gt;192&lt;/span&gt;.&lt;span class="m"&gt;168&lt;/span&gt;.&lt;span class="m"&gt;1&lt;/span&gt;.&lt;span class="m"&gt;150&lt;/span&gt; &lt;span class="n"&gt;root&lt;/span&gt;
---&lt;span class="n"&gt;TRANSACTION&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;29446239&lt;/span&gt;, &lt;span class="n"&gt;not&lt;/span&gt; &lt;span class="n"&gt;started&lt;/span&gt;, &lt;span class="n"&gt;process&lt;/span&gt; &lt;span class="n"&gt;no&lt;/span&gt; &lt;span class="m"&gt;2687&lt;/span&gt;, &lt;span class="n"&gt;OS&lt;/span&gt; &lt;span class="n"&gt;thread&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="m"&gt;2766052240&lt;/span&gt;
&lt;span class="n"&gt;MySQL&lt;/span&gt; &lt;span class="n"&gt;thread&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="m"&gt;19207&lt;/span&gt;, &lt;span class="n"&gt;query&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="m"&gt;122339&lt;/span&gt; &lt;span class="m"&gt;127&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="n"&gt;root&lt;/span&gt;
---&lt;span class="n"&gt;TRANSACTION&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;29445785&lt;/span&gt;, &lt;span class="n"&gt;not&lt;/span&gt; &lt;span class="n"&gt;started&lt;/span&gt;, &lt;span class="n"&gt;process&lt;/span&gt; &lt;span class="n"&gt;no&lt;/span&gt; &lt;span class="m"&gt;2687&lt;/span&gt;, &lt;span class="n"&gt;OS&lt;/span&gt; &lt;span class="n"&gt;thread&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="m"&gt;2765355920&lt;/span&gt;
&lt;span class="n"&gt;MySQL&lt;/span&gt; &lt;span class="n"&gt;thread&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="m"&gt;11&lt;/span&gt;, &lt;span class="n"&gt;query&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="m"&gt;1821&lt;/span&gt; &lt;span class="m"&gt;127&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="n"&gt;root&lt;/span&gt;
---&lt;span class="n"&gt;TRANSACTION&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;29445848&lt;/span&gt;, &lt;span class="n"&gt;ACTIVE&lt;/span&gt; &lt;span class="m"&gt;58874&lt;/span&gt; &lt;span class="n"&gt;sec&lt;/span&gt;, &lt;span class="n"&gt;process&lt;/span&gt; &lt;span class="n"&gt;no&lt;/span&gt; &lt;span class="m"&gt;2687&lt;/span&gt;, &lt;span class="n"&gt;OS&lt;/span&gt; &lt;span class="n"&gt;thread&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="m"&gt;2768038800&lt;/span&gt;
&lt;span class="m"&gt;2&lt;/span&gt; &lt;span class="n"&gt;lock&lt;/span&gt; &lt;span class="n"&gt;struct&lt;/span&gt;(&lt;span class="n"&gt;s&lt;/span&gt;), &lt;span class="n"&gt;heap&lt;/span&gt; &lt;span class="n"&gt;size&lt;/span&gt; &lt;span class="m"&gt;320&lt;/span&gt;, &lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="n"&gt;row&lt;/span&gt; &lt;span class="n"&gt;lock&lt;/span&gt;(&lt;span class="n"&gt;s&lt;/span&gt;), &lt;span class="n"&gt;undo&lt;/span&gt; &lt;span class="n"&gt;log&lt;/span&gt; &lt;span class="n"&gt;entries&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
&lt;span class="n"&gt;MySQL&lt;/span&gt; &lt;span class="n"&gt;thread&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="m"&gt;10&lt;/span&gt;, &lt;span class="n"&gt;query&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="m"&gt;3725&lt;/span&gt; &lt;span class="m"&gt;127&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="n"&gt;root&lt;/span&gt;
--------
&lt;span class="n"&gt;FILE&lt;/span&gt; &lt;span class="n"&gt;I&lt;/span&gt;/&lt;span class="n"&gt;O&lt;/span&gt;
--------
&lt;span class="n"&gt;I&lt;/span&gt;/&lt;span class="n"&gt;O&lt;/span&gt; &lt;span class="n"&gt;thread&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="n"&gt;state&lt;/span&gt;: &lt;span class="n"&gt;waiting&lt;/span&gt; &lt;span class="n"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;/&lt;span class="n"&gt;o&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt; (&lt;span class="n"&gt;insert&lt;/span&gt; &lt;span class="n"&gt;buffer&lt;/span&gt; &lt;span class="n"&gt;thread&lt;/span&gt;)
&lt;span class="n"&gt;I&lt;/span&gt;/&lt;span class="n"&gt;O&lt;/span&gt; &lt;span class="n"&gt;thread&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="n"&gt;state&lt;/span&gt;: &lt;span class="n"&gt;waiting&lt;/span&gt; &lt;span class="n"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;/&lt;span class="n"&gt;o&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt; (&lt;span class="n"&gt;log&lt;/span&gt; &lt;span class="n"&gt;thread&lt;/span&gt;)
&lt;span class="n"&gt;I&lt;/span&gt;/&lt;span class="n"&gt;O&lt;/span&gt; &lt;span class="n"&gt;thread&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt; &lt;span class="n"&gt;state&lt;/span&gt;: &lt;span class="n"&gt;waiting&lt;/span&gt; &lt;span class="n"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;/&lt;span class="n"&gt;o&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt; (&lt;span class="n"&gt;read&lt;/span&gt; &lt;span class="n"&gt;thread&lt;/span&gt;)
&lt;span class="n"&gt;I&lt;/span&gt;/&lt;span class="n"&gt;O&lt;/span&gt; &lt;span class="n"&gt;thread&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt; &lt;span class="n"&gt;state&lt;/span&gt;: &lt;span class="n"&gt;waiting&lt;/span&gt; &lt;span class="n"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;/&lt;span class="n"&gt;o&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt; (&lt;span class="n"&gt;write&lt;/span&gt; &lt;span class="n"&gt;thread&lt;/span&gt;)
&lt;span class="n"&gt;Pending&lt;/span&gt; &lt;span class="n"&gt;normal&lt;/span&gt; &lt;span class="n"&gt;aio&lt;/span&gt; &lt;span class="n"&gt;reads&lt;/span&gt;: &lt;span class="m"&gt;0&lt;/span&gt;, &lt;span class="n"&gt;aio&lt;/span&gt; &lt;span class="n"&gt;writes&lt;/span&gt;: &lt;span class="m"&gt;0&lt;/span&gt;,
 &lt;span class="n"&gt;ibuf&lt;/span&gt; &lt;span class="n"&gt;aio&lt;/span&gt; &lt;span class="n"&gt;reads&lt;/span&gt;: &lt;span class="m"&gt;0&lt;/span&gt;, &lt;span class="n"&gt;log&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;/&lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="s1"&gt;'s: 0, sync i/o'&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;: &lt;span class="m"&gt;0&lt;/span&gt;
&lt;span class="n"&gt;Pending&lt;/span&gt; &lt;span class="n"&gt;flushes&lt;/span&gt; (&lt;span class="n"&gt;fsync&lt;/span&gt;) &lt;span class="n"&gt;log&lt;/span&gt;: &lt;span class="m"&gt;0&lt;/span&gt;; &lt;span class="n"&gt;buffer&lt;/span&gt; &lt;span class="n"&gt;pool&lt;/span&gt;: &lt;span class="m"&gt;0&lt;/span&gt;
&lt;span class="m"&gt;26327&lt;/span&gt; &lt;span class="n"&gt;OS&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt; &lt;span class="n"&gt;reads&lt;/span&gt;, &lt;span class="m"&gt;350&lt;/span&gt; &lt;span class="n"&gt;OS&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt; &lt;span class="n"&gt;writes&lt;/span&gt;, &lt;span class="m"&gt;243&lt;/span&gt; &lt;span class="n"&gt;OS&lt;/span&gt; &lt;span class="n"&gt;fsyncs&lt;/span&gt;
&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;00&lt;/span&gt; &lt;span class="n"&gt;reads&lt;/span&gt;/&lt;span class="n"&gt;s&lt;/span&gt;, &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="n"&gt;avg&lt;/span&gt; &lt;span class="n"&gt;bytes&lt;/span&gt;/&lt;span class="n"&gt;read&lt;/span&gt;, &lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;00&lt;/span&gt; &lt;span class="n"&gt;writes&lt;/span&gt;/&lt;span class="n"&gt;s&lt;/span&gt;, &lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;00&lt;/span&gt; &lt;span class="n"&gt;fsyncs&lt;/span&gt;/&lt;span class="n"&gt;s&lt;/span&gt;
-------------------------------------
&lt;span class="n"&gt;INSERT&lt;/span&gt; &lt;span class="n"&gt;BUFFER&lt;/span&gt; &lt;span class="n"&gt;AND&lt;/span&gt; &lt;span class="n"&gt;ADAPTIVE&lt;/span&gt; &lt;span class="n"&gt;HASH&lt;/span&gt; &lt;span class="n"&gt;INDEX&lt;/span&gt;
-------------------------------------
&lt;span class="n"&gt;Ibuf&lt;/span&gt;: &lt;span class="n"&gt;size&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;, &lt;span class="n"&gt;free&lt;/span&gt; &lt;span class="n"&gt;list&lt;/span&gt; &lt;span class="n"&gt;len&lt;/span&gt; &lt;span class="m"&gt;5&lt;/span&gt;, &lt;span class="n"&gt;seg&lt;/span&gt; &lt;span class="n"&gt;size&lt;/span&gt; &lt;span class="m"&gt;7&lt;/span&gt;,
&lt;span class="m"&gt;3&lt;/span&gt; &lt;span class="n"&gt;inserts&lt;/span&gt;, &lt;span class="m"&gt;3&lt;/span&gt; &lt;span class="n"&gt;merged&lt;/span&gt; &lt;span class="n"&gt;recs&lt;/span&gt;, &lt;span class="m"&gt;3&lt;/span&gt; &lt;span class="n"&gt;merges&lt;/span&gt;
&lt;span class="n"&gt;Hash&lt;/span&gt; &lt;span class="n"&gt;table&lt;/span&gt; &lt;span class="n"&gt;size&lt;/span&gt; &lt;span class="m"&gt;276707&lt;/span&gt;, &lt;span class="n"&gt;node&lt;/span&gt; &lt;span class="n"&gt;heap&lt;/span&gt; &lt;span class="n"&gt;has&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt; &lt;span class="n"&gt;buffer&lt;/span&gt;(&lt;span class="n"&gt;s&lt;/span&gt;)
&lt;span class="m"&gt;16&lt;/span&gt;.&lt;span class="m"&gt;74&lt;/span&gt; &lt;span class="n"&gt;hash&lt;/span&gt; &lt;span class="n"&gt;searches&lt;/span&gt;/&lt;span class="n"&gt;s&lt;/span&gt;, &lt;span class="m"&gt;6&lt;/span&gt;.&lt;span class="m"&gt;80&lt;/span&gt; &lt;span class="n"&gt;non&lt;/span&gt;-&lt;span class="n"&gt;hash&lt;/span&gt; &lt;span class="n"&gt;searches&lt;/span&gt;/&lt;span class="n"&gt;s&lt;/span&gt;
---
&lt;span class="n"&gt;LOG&lt;/span&gt;
---
&lt;span class="n"&gt;Log&lt;/span&gt; &lt;span class="n"&gt;sequence&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt; &lt;span class="m"&gt;12&lt;/span&gt; &lt;span class="m"&gt;3680676575&lt;/span&gt;
&lt;span class="n"&gt;Log&lt;/span&gt; &lt;span class="n"&gt;flushed&lt;/span&gt; &lt;span class="n"&gt;up&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt;   &lt;span class="m"&gt;12&lt;/span&gt; &lt;span class="m"&gt;3680676575&lt;/span&gt;
&lt;span class="n"&gt;Last&lt;/span&gt; &lt;span class="n"&gt;checkpoint&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt;  &lt;span class="m"&gt;12&lt;/span&gt; &lt;span class="m"&gt;3680676575&lt;/span&gt;
&lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="n"&gt;pending&lt;/span&gt; &lt;span class="n"&gt;log&lt;/span&gt; &lt;span class="n"&gt;writes&lt;/span&gt;, &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="n"&gt;pending&lt;/span&gt; &lt;span class="n"&gt;chkp&lt;/span&gt; &lt;span class="n"&gt;writes&lt;/span&gt;
&lt;span class="m"&gt;155&lt;/span&gt; &lt;span class="n"&gt;log&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;/&lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="s1"&gt;'s done, 0.00 log i/o'&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;/&lt;span class="n"&gt;second&lt;/span&gt;
----------------------
&lt;span class="n"&gt;BUFFER&lt;/span&gt; &lt;span class="n"&gt;POOL&lt;/span&gt; &lt;span class="n"&gt;AND&lt;/span&gt; &lt;span class="n"&gt;MEMORY&lt;/span&gt;
----------------------
&lt;span class="n"&gt;Total&lt;/span&gt; &lt;span class="n"&gt;memory&lt;/span&gt; &lt;span class="n"&gt;allocated&lt;/span&gt; &lt;span class="m"&gt;81330832&lt;/span&gt;; &lt;span class="n"&gt;in&lt;/span&gt; &lt;span class="n"&gt;additional&lt;/span&gt; &lt;span class="n"&gt;pool&lt;/span&gt; &lt;span class="n"&gt;allocated&lt;/span&gt; &lt;span class="m"&gt;1048576&lt;/span&gt;
&lt;span class="n"&gt;Dictionary&lt;/span&gt; &lt;span class="n"&gt;memory&lt;/span&gt; &lt;span class="n"&gt;allocated&lt;/span&gt; &lt;span class="m"&gt;359936&lt;/span&gt;
&lt;span class="n"&gt;Buffer&lt;/span&gt; &lt;span class="n"&gt;pool&lt;/span&gt; &lt;span class="n"&gt;size&lt;/span&gt;   &lt;span class="m"&gt;4096&lt;/span&gt;
&lt;span class="n"&gt;Free&lt;/span&gt; &lt;span class="n"&gt;buffers&lt;/span&gt;       &lt;span class="m"&gt;0&lt;/span&gt;
&lt;span class="n"&gt;Database&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt;     &lt;span class="m"&gt;4094&lt;/span&gt;
&lt;span class="n"&gt;Modified&lt;/span&gt; &lt;span class="n"&gt;db&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt;  &lt;span class="m"&gt;0&lt;/span&gt;
&lt;span class="n"&gt;Pending&lt;/span&gt; &lt;span class="n"&gt;reads&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
&lt;span class="n"&gt;Pending&lt;/span&gt; &lt;span class="n"&gt;writes&lt;/span&gt;: &lt;span class="n"&gt;LRU&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;, &lt;span class="n"&gt;flush&lt;/span&gt; &lt;span class="n"&gt;list&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;, &lt;span class="n"&gt;single&lt;/span&gt; &lt;span class="n"&gt;page&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
&lt;span class="n"&gt;Pages&lt;/span&gt; &lt;span class="n"&gt;read&lt;/span&gt; &lt;span class="m"&gt;128174&lt;/span&gt;, &lt;span class="n"&gt;created&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;, &lt;span class="n"&gt;written&lt;/span&gt; &lt;span class="m"&gt;183&lt;/span&gt;
&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;00&lt;/span&gt; &lt;span class="n"&gt;reads&lt;/span&gt;/&lt;span class="n"&gt;s&lt;/span&gt;, &lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;00&lt;/span&gt; &lt;span class="n"&gt;creates&lt;/span&gt;/&lt;span class="n"&gt;s&lt;/span&gt;, &lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;00&lt;/span&gt; &lt;span class="n"&gt;writes&lt;/span&gt;/&lt;span class="n"&gt;s&lt;/span&gt;
&lt;span class="n"&gt;Buffer&lt;/span&gt; &lt;span class="n"&gt;pool&lt;/span&gt; &lt;span class="n"&gt;hit&lt;/span&gt; &lt;span class="n"&gt;rate&lt;/span&gt; &lt;span class="m"&gt;1000&lt;/span&gt; / &lt;span class="m"&gt;1000&lt;/span&gt;
--------------
&lt;span class="n"&gt;ROW&lt;/span&gt; &lt;span class="n"&gt;OPERATIONS&lt;/span&gt;
--------------
&lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="n"&gt;queries&lt;/span&gt; &lt;span class="n"&gt;inside&lt;/span&gt; &lt;span class="n"&gt;InnoDB&lt;/span&gt;, &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="n"&gt;queries&lt;/span&gt; &lt;span class="n"&gt;in&lt;/span&gt; &lt;span class="n"&gt;queue&lt;/span&gt;
&lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="n"&gt;read&lt;/span&gt; &lt;span class="n"&gt;views&lt;/span&gt; &lt;span class="n"&gt;open&lt;/span&gt; &lt;span class="n"&gt;inside&lt;/span&gt; &lt;span class="n"&gt;InnoDB&lt;/span&gt;
&lt;span class="n"&gt;Main&lt;/span&gt; &lt;span class="n"&gt;thread&lt;/span&gt; &lt;span class="n"&gt;process&lt;/span&gt; &lt;span class="n"&gt;no&lt;/span&gt;. &lt;span class="m"&gt;2687&lt;/span&gt;, &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="m"&gt;2719468432&lt;/span&gt;, &lt;span class="n"&gt;state&lt;/span&gt;: &lt;span class="n"&gt;sleeping&lt;/span&gt;
&lt;span class="n"&gt;Number&lt;/span&gt; &lt;span class="n"&gt;of&lt;/span&gt; &lt;span class="n"&gt;rows&lt;/span&gt; &lt;span class="n"&gt;inserted&lt;/span&gt; &lt;span class="m"&gt;6&lt;/span&gt;, &lt;span class="n"&gt;updated&lt;/span&gt; &lt;span class="m"&gt;36&lt;/span&gt;, &lt;span class="n"&gt;deleted&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;, &lt;span class="n"&gt;read&lt;/span&gt; &lt;span class="m"&gt;2135875&lt;/span&gt;
&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;00&lt;/span&gt; &lt;span class="n"&gt;inserts&lt;/span&gt;/&lt;span class="n"&gt;s&lt;/span&gt;, &lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;00&lt;/span&gt; &lt;span class="n"&gt;updates&lt;/span&gt;/&lt;span class="n"&gt;s&lt;/span&gt;, &lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;00&lt;/span&gt; &lt;span class="n"&gt;deletes&lt;/span&gt;/&lt;span class="n"&gt;s&lt;/span&gt;, &lt;span class="m"&gt;22&lt;/span&gt;.&lt;span class="m"&gt;22&lt;/span&gt; &lt;span class="n"&gt;reads&lt;/span&gt;/&lt;span class="n"&gt;s&lt;/span&gt;
----------------------------
&lt;span class="n"&gt;END&lt;/span&gt; &lt;span class="n"&gt;OF&lt;/span&gt; &lt;span class="n"&gt;INNODB&lt;/span&gt; &lt;span class="n"&gt;MONITOR&lt;/span&gt; &lt;span class="n"&gt;OUTPUT&lt;/span&gt;
============================

&lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="n"&gt;row&lt;/span&gt; &lt;span class="n"&gt;in&lt;/span&gt; &lt;span class="n"&gt;set&lt;/span&gt;, &lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="n"&gt;warning&lt;/span&gt; (&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;00&lt;/span&gt; &lt;span class="n"&gt;sec&lt;/span&gt;)

&lt;span class="n"&gt;ERROR&lt;/span&gt;: 
&lt;span class="n"&gt;No&lt;/span&gt; &lt;span class="n"&gt;query&lt;/span&gt; &lt;span class="n"&gt;specified&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;还请各位前辈指点迷津，谢谢。&lt;/p&gt;

&lt;p&gt;解决方法：show processlist;然后 kill 掉 status  = sleep &lt;/p&gt;</description>
      <author>noob</author>
      <pubDate>Fri, 17 Jun 2016 18:21:50 +0800</pubDate>
      <link>https://ruby-china.org/topics/30305</link>
      <guid>https://ruby-china.org/topics/30305</guid>
    </item>
    <item>
      <title>ActiveRecord 该如何缓存 SQL 查询出来的数据</title>
      <description>&lt;p&gt;各路神仙请显灵，该如何实现：可以缓存@ placements 里的数据，同时 placements 表中数据是会变化的，可否设置缓存时间，缓存失效后，重新查询 placements 表。&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'active_record'&lt;/span&gt;

&lt;span class="no"&gt;ActiveRecord&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Base&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;establish_connection&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:adapter&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"mysql2"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:host&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"10.1.1.130"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:username&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"xmo_prd"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:database&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"xmo"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:encoding&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"utf8"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:password&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"MWc200bs"&lt;/span&gt;&lt;span class="p"&gt;,)&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Plecement&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;ActiveRecord&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Base&lt;/span&gt;
  &lt;span class="vi"&gt;@placements&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="no"&gt;ActiveRecord&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Base&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;connection&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"select id, placement_name from placements"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;collect&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;e&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="n"&gt;e&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="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nc"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;tv_source&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;uid&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;placement_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;""&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;placement_id&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;nil?&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;uid&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;nil?&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;uid&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;empty?&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="vi"&gt;@placements.detect&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;placement_id&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;e&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="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"_"&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="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;uid&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"_"&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="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;</description>
      <author>noob</author>
      <pubDate>Thu, 24 Sep 2015 10:58:25 +0800</pubDate>
      <link>https://ruby-china.org/topics/27459</link>
      <guid>https://ruby-china.org/topics/27459</guid>
    </item>
    <item>
      <title>书不在多，精读才行</title>
      <description>&lt;p&gt;山不在高，有仙则灵，水不在深，有龙则灵，书不在多，精读才行。
希望各位高人，能提供本重构的书，ruby 进阶的书
ps：这样写是不是标题党啊？&lt;/p&gt;</description>
      <author>noob</author>
      <pubDate>Wed, 16 Sep 2015 14:53:12 +0800</pubDate>
      <link>https://ruby-china.org/topics/27361</link>
      <guid>https://ruby-china.org/topics/27361</guid>
    </item>
    <item>
      <title>HR 该不该这样做</title>
      <description>&lt;p&gt;面试隔天接到 hr 的通知电话，告诉我税前的工资是多少，然后问我知道税后是多少，我说应该是**k 吧，hr 随后问什么时候能来上班啊。。。。。，上班的第一天休息时间，同学打电话的时候突然聊到工资，得知我们税后不一样，遂问 hr 我税后到底是多少，hr 回答：你是想比 Offer 吗？气急：难道我连自己税后的工资都没有知情权吗？hr：具体是多少我也不知道，你自己去网上算算吧，和网上九米算的差不多。ps（我去，神马 xx）。最后只能等到月末，发现竟比预算少 1k。&lt;/p&gt;

&lt;p&gt;ps 大家一定要问清楚税后，不要像我一样以为是这些，同时还想问一下，难道 hr 不该把税后工资告诉我吗？&lt;/p&gt;</description>
      <author>noob</author>
      <pubDate>Tue, 15 Sep 2015 11:43:05 +0800</pubDate>
      <link>https://ruby-china.org/topics/27337</link>
      <guid>https://ruby-china.org/topics/27337</guid>
    </item>
    <item>
      <title>北京好多拆迁的</title>
      <description>&lt;p&gt;北京好多拆迁的，住了好几年的地方就要走了，还是蛮怀念的&lt;/p&gt;</description>
      <author>noob</author>
      <pubDate>Fri, 31 Jul 2015 15:25:56 +0800</pubDate>
      <link>https://ruby-china.org/topics/26719</link>
      <guid>https://ruby-china.org/topics/26719</guid>
    </item>
    <item>
      <title>Ruby map、each、select、inject、collect 、detect reference</title>
      <description>&lt;p&gt;感觉在像写个人日志一样，这些小知识不知道能不能帮到大家，同时也希望大牛们多多指教，多多传授一下工作中常用的技术或者方法，小菜谢过了&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;map：(collect 是 map 的别名函数)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;对数组中每个元素进行表达式操作，原始数组不会被改变，返回执行表达式&lt;strong&gt;结果的&lt;/strong&gt;新数组&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&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="mi"&gt;4&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;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;  
&lt;span class="o"&gt;=&amp;gt;&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="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;21&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;27&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&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="mi"&gt;4&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;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;collect&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; 
&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="kp"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kp"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kp"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kp"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kp"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kp"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kp"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kp"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kp"&gt;false&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;each：&lt;/strong&gt;
    &lt;em&gt;常用作数组的循环操作，对循环的参数做表达式操作，原数组不会被改变，返回原始数组&lt;/em&gt;&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;eg&lt;/span&gt;&lt;span class="err"&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="mi"&gt;4&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;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;10&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;e&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;print&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to_s&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s2"&gt;"###"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; 
    &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="c1"&gt;###2###3###4###5###6###7###8###9###10### =&amp;gt;返回 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] &lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;select：&lt;/strong&gt;
    相当于过滤器，返回符合表达式&lt;strong&gt;元素的&lt;/strong&gt;新数组，如果所有都不符合表达式则返回空数组&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt; &lt;span class="n"&gt;eg&lt;/span&gt;&lt;span class="err"&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="mi"&gt;4&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;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;select&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
   &lt;span class="o"&gt;=&amp;gt;&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;eg&lt;/span&gt;&lt;span class="err"&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="mi"&gt;4&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;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;select&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="o"&gt;=&amp;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="mi"&gt;4&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;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;detect：（find 的别名函数）&lt;/strong&gt;
    &lt;em&gt;返回列表中第一个符合条件的元素&lt;/em&gt;&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;eg&lt;/span&gt;&lt;span class="err"&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="mi"&gt;4&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;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;detect&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
   &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;  &lt;span class="mi"&gt;2&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;inject:&lt;/strong&gt;
  &lt;em&gt;在所声明的容器中注入符合条件的元素，累加器作用&lt;/em&gt;&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;eg&lt;/span&gt;&lt;span class="err"&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="mi"&gt;4&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;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;10&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="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;sum&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="n"&gt;其中sum为所声明的注入器&lt;/span&gt; &lt;span class="n"&gt;将累加后的结果最后注入到sum中并返回注入器最后结果&lt;/span&gt;
&lt;span class="n"&gt;eg&lt;/span&gt;&lt;span class="err"&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="mi"&gt;4&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;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;10&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="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;elem&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;elem&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;55&lt;/span&gt;
  &lt;span class="n"&gt;此时inject没有带参数&lt;/span&gt;&lt;span class="err"&gt;，&lt;/span&gt;&lt;span class="n"&gt;这是result会为数组中第一个元素&lt;/span&gt;&lt;span class="err"&gt;，&lt;/span&gt;&lt;span class="n"&gt;elem为第二个元素&lt;/span&gt;&lt;span class="err"&gt;，&lt;/span&gt;&lt;span class="n"&gt;依次累加返回最后结果&lt;/span&gt; 
&lt;span class="ss"&gt;eg:  &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'a'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'b'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="s1"&gt;'c'&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="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&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="s1"&gt;'c'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;reject:&lt;/strong&gt;
 &lt;em&gt;去除列表中符合条件的元素&lt;/em&gt;&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;eg&lt;/span&gt;&lt;span class="err"&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="mi"&gt;4&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;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;reject&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
   &lt;span class="o"&gt;=&amp;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;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&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;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;</description>
      <author>noob</author>
      <pubDate>Fri, 31 Jul 2015 15:06:56 +0800</pubDate>
      <link>https://ruby-china.org/topics/26718</link>
      <guid>https://ruby-china.org/topics/26718</guid>
    </item>
    <item>
      <title>使用 Capsitrano 部署 Sinatra 项目</title>
      <description>&lt;p&gt;第一次发帖，请各位多多指教，新人在此谢过了，格式不太好，以后会多多注意的 
1：首先在 Gemfile 中加入&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt; &lt;span class="n"&gt;group&lt;/span&gt; &lt;span class="ss"&gt;:development&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
     &lt;span class="n"&gt;gem&lt;/span&gt; &lt;span class="s1"&gt;'capistrano'&lt;/span&gt;
     &lt;span class="n"&gt;gem&lt;/span&gt; &lt;span class="s1"&gt;'capistrano-chruby'&lt;/span&gt;
     &lt;span class="n"&gt;gem&lt;/span&gt; &lt;span class="s1"&gt;'capistrano-rvm'&lt;/span&gt;
     &lt;span class="n"&gt;gem&lt;/span&gt; &lt;span class="s1"&gt;'capistrano-bundler'&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;   
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;2：bundle install 安装 capistrano
 3：执行结果：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  dongchaodeMacBook-Pro:happy iclick$ capify .
--------------------------------------------------------------------------------
Capistrano 3.x is incompatible with Capistrano 2.x.

This command has become `cap install` in Capistrano 3.x

For more information see http://www.capistranorb.com/
————————————————————————————————————————
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;4：执行 cap install
    执行结果&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dongchaodeMacBook-Pro:happy iclick$ cap install
mkdir -p config/deploy
create config/deploy.rb
create config/deploy/staging.rb
create config/deploy/production.rb
mkdir -p lib/capistrano/tasks
create Capfile
Capified
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;5：配置发布项目的一些属性
    1）在 config/deploy.rb 中加入如下例子：（根据不同的项目更改不同的配置信息）&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;# config valid only for current version of Capistrano&lt;/span&gt;
&lt;span class="n"&gt;lock&lt;/span&gt; &lt;span class="s1"&gt;'3.4.0'&lt;/span&gt;

&lt;span class="n"&gt;set&lt;/span&gt; &lt;span class="ss"&gt;:application&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'redis_move'&lt;/span&gt;   &lt;span class="c1"&gt;#项目的名称&lt;/span&gt;

&lt;span class="n"&gt;set&lt;/span&gt; &lt;span class="ss"&gt;:repo_url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'ssh://xmo@10.1.1.172:2727/share/xmo/redis_move'&lt;/span&gt;  &lt;span class="c1"&gt;#得到项目源码地址&lt;/span&gt;

&lt;span class="n"&gt;set&lt;/span&gt; &lt;span class="ss"&gt;:branch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;'flush_code'&lt;/span&gt;  &lt;span class="c1"&gt;# 远程分支&lt;/span&gt;

&lt;span class="n"&gt;set&lt;/span&gt; &lt;span class="ss"&gt;:deploy_to&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'/opt/redis_move'&lt;/span&gt;  &lt;span class="c1"&gt;#发布到服务器的存储地址&lt;/span&gt;


&lt;span class="n"&gt;set&lt;/span&gt; &lt;span class="ss"&gt;:bundle_flags&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'--deployment'&lt;/span&gt; 

&lt;span class="n"&gt;set&lt;/span&gt; &lt;span class="ss"&gt;:bundle_gemfile&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;release_path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Gemfile'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; 
&lt;span class="n"&gt;注&lt;/span&gt;&lt;span class="err"&gt;：&lt;/span&gt; &lt;span class="n"&gt;bundle_gemfile&lt;/span&gt; &lt;span class="n"&gt;和bundle_flags&lt;/span&gt; &lt;span class="n"&gt;发布的时候自动执行bundle&lt;/span&gt;&lt;span class="err"&gt;，&lt;/span&gt;&lt;span class="n"&gt;还需要将&lt;/span&gt; &lt;span class="n"&gt;根目录下Capfile中得require&lt;/span&gt; &lt;span class="s1"&gt;'capistrano/bundler'&lt;/span&gt;&lt;span class="n"&gt;注释解开&lt;/span&gt;

&lt;span class="n"&gt;set&lt;/span&gt; &lt;span class="ss"&gt;:chruby_ruby&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'ruby-2.1.3'&lt;/span&gt;

&lt;span class="n"&gt;set&lt;/span&gt; &lt;span class="ss"&gt;:rvm_ruby_version&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'ruby-2.1.3'&lt;/span&gt;

&lt;span class="n"&gt;set&lt;/span&gt; &lt;span class="ss"&gt;:stages&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sx"&gt;%w(staging production)&lt;/span&gt;

&lt;span class="n"&gt;set&lt;/span&gt; &lt;span class="ss"&gt;:default_stage&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"production"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;注：set：stages 中后面的值和 config/deploy/下面的文件名称相对应 default_stage 默认执行 production 中得配置
（其中配置内容 eg：server '10.21.20.124', user: 'xmo', roles: %w{web}）&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;set&lt;/span&gt; &lt;span class="ss"&gt;:scm&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:git&lt;/span&gt; &lt;span class="c1"&gt;#默认使用git&lt;/span&gt;

&lt;span class="n"&gt;set&lt;/span&gt; &lt;span class="ss"&gt;:linked_files&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:linked_files&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[]).&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"config.ru"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
 &lt;span class="c1"&gt;#添加一些项目中不变更的配置信息这些配置文件会被放在shared中，作用是将shared中得文件链接到repo下来的项目中，&lt;/span&gt;
&lt;span class="n"&gt;注&lt;/span&gt;&lt;span class="err"&gt;：&lt;/span&gt;&lt;span class="n"&gt;首先shared中得文件事先scp上去&lt;/span&gt;&lt;span class="err"&gt;，&lt;/span&gt;&lt;span class="n"&gt;否则会报错&lt;/span&gt;


&lt;span class="n"&gt;set&lt;/span&gt; &lt;span class="ss"&gt;:linked_dirs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:linked_dirs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[]).&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'log'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'tmp/pids'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'tmp/cache'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'tmp/sockets'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'vendor/bundle'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'public/system'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# 是将项目的指定目录链接到shared目录中。这个操作会在从repo取下代码之后进行&lt;/span&gt;

&lt;span class="c1"&gt;# Default value for keep_releases is 5&lt;/span&gt;
&lt;span class="n"&gt;set&lt;/span&gt; &lt;span class="ss"&gt;:keep_releases&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;

&lt;span class="c1"&gt;#每次发布完成之后使用thin重启服务&lt;/span&gt;
&lt;span class="n"&gt;namespace&lt;/span&gt; &lt;span class="ss"&gt;:deploy&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
    &lt;span class="n"&gt;task&lt;/span&gt; &lt;span class="ss"&gt;:start&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
        &lt;span class="n"&gt;on&lt;/span&gt; &lt;span class="n"&gt;roles&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:web&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="ss"&gt;in: :sequence&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;wait: &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
            &lt;span class="n"&gt;within&lt;/span&gt; &lt;span class="n"&gt;release_path&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
                &lt;span class="n"&gt;execute&lt;/span&gt; &lt;span class="s2"&gt;"cd /opt/redis_move/current;bundle exec thin -P tmp/rack.pid -e production -p 9191 -l logs/thin.log -d start"&lt;/span&gt;
           &lt;span class="k"&gt;end&lt;/span&gt;
       &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="n"&gt;task&lt;/span&gt; &lt;span class="ss"&gt;:stop&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
    &lt;span class="n"&gt;path&lt;/span&gt; &lt;span class="o"&gt;=&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="s2"&gt;".."&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="n"&gt;file_path&lt;/span&gt; &lt;span class="o"&gt;=&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;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"tmp/rack.pid"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&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;exist?&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;file_path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;then&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;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;file_path&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;file&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
           &lt;span class="n"&gt;pid&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;file&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;system&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"kill -9 &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;pid&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="k"&gt;end&lt;/span&gt;
     &lt;span class="no"&gt;FileUtils&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rm&lt;/span&gt; &lt;span class="n"&gt;file_path&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;task&lt;/span&gt; &lt;span class="ss"&gt;:restart&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:stop&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:start&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;after&lt;/span&gt; &lt;span class="ss"&gt;:published&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:restart&lt;/span&gt;


&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;上传服务器之后的文件列表图片
&lt;img src="https://l.ruby-china.com/photo/2015/ce3c09414ea101c27690eb6d7abdb2fc.png" title="" alt=""&gt;
更多详细信息：&lt;a href="https://ruby-china.org/topics/18616" rel="nofollow" target="_blank"&gt;https://ruby-china.org/topics/18616&lt;/a&gt;&lt;/p&gt;</description>
      <author>noob</author>
      <pubDate>Fri, 31 Jul 2015 15:02:22 +0800</pubDate>
      <link>https://ruby-china.org/topics/26717</link>
      <guid>https://ruby-china.org/topics/26717</guid>
    </item>
  </channel>
</rss>
