<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>moliliang (莫粒)</title>
    <link>https://ruby-china.org/moliliang</link>
    <description>如果做的不够好，只能说明自己没有用心。</description>
    <language>en-us</language>
    <item>
      <title>rails 的�邮件目录规划统一</title>
      <description>&lt;p&gt;转载至自己的博客 &lt;a href="http://huoxr.com/rails/2018/03/02/mailer-dir.html" rel="nofollow" target="_blank"&gt;http://huoxr.com/rails/2018/03/02/mailer-dir.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Rails 的 Mailer 目录停蛋疼的，没统一。&lt;/p&gt;

&lt;p&gt;比如订单的邮箱 OrderMailer，目录默认在 views/order_mailer 下。&lt;/p&gt;

&lt;p&gt;如果你又有别的邮件，比如提现 WithdrawMailer 默认目录又在 views/withdraw_mailer。&lt;/p&gt;

&lt;p&gt;如果你有很多种的邮件类型，每次建立一个 mailer，views 下就多一个 mailer 目录，可能有点强迫症，mailer 很影响 views 的目录结构美观呢！&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;所以我决定改一下，把所有的 mailer 都放在 views/mailers 目录下&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;我想，大一点的项目，应该有规划 mailer 的目录吧，结果看了下 gitlab 这个项目，也木有。。&lt;/p&gt;

&lt;p&gt;所以啥也别说了，先看源码，看看怎么改。&lt;/p&gt;

&lt;p&gt;打开 rails 的附带 gem actionmailer 中的 action_mailer/base.rb 文件&lt;/p&gt;

&lt;p&gt;找到 def mail 方法&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;mail&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{},&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;block&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="err"&gt;……&lt;/span&gt;
    &lt;span class="c1"&gt;# Render the templates and blocks&lt;/span&gt;
    &lt;span class="n"&gt;responses&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;collect_responses&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;block&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="err"&gt;……&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;顺着 collect_responses 方法，再找到&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;collect_responses_from_templates&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="n"&gt;templates_path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:template_path&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nb"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;class&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;mailer_name&lt;/span&gt;
&lt;span class="n"&gt;templates_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:template_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;action_name&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;上面的代码发现原来 headers 中可以传参数来指定模板目录……然后 Dash 看了下 mail 方法，上面还真写着。。（心里暗骂自己一句傻逼）&lt;/p&gt;

&lt;p&gt;行了，继承 ApplicationMailer，重写 mail 方法&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;BaseMailer&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;ApplicationMailer&lt;/span&gt;
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;mail&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;block&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;subdir&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;class&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;name&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;remove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Mailer'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;downcase&lt;/span&gt;
    &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;merge!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;template_path: &lt;/span&gt;&lt;span class="s2"&gt;"mailers/&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;subdir&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;super&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;&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;OrderMailer&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;BaseMailer&lt;/span&gt;
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;paid&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;mail&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;to: &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;buyer_email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;subject: &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="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;现在 paid 将在 views/mailers/order/paid.html.haml 中找到该文件。&lt;/p&gt;

&lt;p&gt;完。。&lt;/p&gt;</description>
      <author>moliliang</author>
      <pubDate>Fri, 02 Mar 2018 23:16:11 +0800</pubDate>
      <link>https://ruby-china.org/topics/35128</link>
      <guid>https://ruby-china.org/topics/35128</guid>
    </item>
    <item>
      <title>过年期间写了软件，电子书贩卖网站…</title>
      <description>&lt;p&gt;“过年”期间比较闲（为什么要打引号，因为在职的公司发不出工资，离职了~ 现在待业中）。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;所以想着搞一个小项目帮助软件开发者，电子书出版者，提供一个销售平台吧&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;所以花了前后大概 1 个多月，去掉中间正儿八经的过年，没动电脑，大概用了 20 多天吧，把网站搭起来了。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;年前把网站备案了&lt;/li&gt;
&lt;li&gt;年后申请支付宝，微信支付&lt;/li&gt;
&lt;li&gt;今天正儿八经的上线了~&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;网址 &lt;a href="https://v2geek.com" rel="nofollow" target="_blank"&gt;https://v2geek.com&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;部署在腾讯云。&lt;/p&gt;

&lt;p&gt;使用 caddy + puam 作为服务器。&lt;/p&gt;

&lt;p&gt;还有巨多功能没有搞，比如简单的代码托管，营销等等…… 以及可能还有挺多 bug 的…… 如果你碰到 bug 了，莫慌！异常邮件肯定是有的~ &lt;/p&gt;

&lt;p&gt;为啥要用 caddy，因为想着之后代码托管，短连接等功能可能需要些路由插件什么的，给 caddy 写插件比较简单啦（golang），性能似乎也还不错。&lt;/p&gt;

&lt;p&gt;最重要是自动 https 吖~ 配置贼简单吖，很省事。&lt;/p&gt;

&lt;p&gt;目前的功能还比较简单：发布作品，销售都是 ok 的。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;顺便求个后端开发的工作（深圳）&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;联系 molisoft@qq.com&lt;/p&gt;</description>
      <author>moliliang</author>
      <pubDate>Tue, 27 Feb 2018 17:21:42 +0800</pubDate>
      <link>https://ruby-china.org/topics/35096</link>
      <guid>https://ruby-china.org/topics/35096</guid>
    </item>
    <item>
      <title>Go 写个小程序，替换掉 Sidekiq</title>
      <description>&lt;p&gt;ruby 真是内存大户啊~ &lt;/p&gt;

&lt;p&gt;我的小破站运行在阿里云 1g 内存上，mysql+sidekiq+puma 这三个内存大户吃了大部分的内存。&lt;/p&gt;

&lt;p&gt;时不时从 swap 交换数据的时候，整个系统的负载就飙升，top NO.1 只看到个 kswap[xxx] 的进程。&lt;/p&gt;

&lt;p&gt;所以我决定将 MEM NO.1 的 sidekiq 去掉。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;同时不需要对 rails 中的队列业务做任何改动&lt;/li&gt;
&lt;li&gt;也不需要对一直的定时任务做任何修改&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;于是就用写了这个程序 &lt;a href="https://github.com/molisoft/rkejob/" rel="nofollow" target="_blank"&gt;https://github.com/molisoft/rkejob/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;除了是一个队列（感觉这样改进后，更像是将请求异步化了），还是一个定时任务工具（因为我之前用 Sidetiq 作为定时任务工具）&lt;/p&gt;

&lt;p&gt;之前的 rails 的队列流程如下：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rails  -&amp;gt; redis -&amp;gt; sidekiq(Runing)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;现在的流程：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rails -&amp;gt; redis -&amp;gt; rkejob ---(POST)---&amp;gt; rails
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;什么？！最后请求又请求回来了？没错啊，最后又是 rails web 端来执行队列任务了。所以相当于将“请求异步化”了~~~&lt;/p&gt;

&lt;p&gt;这样的设计，其实就注定不适合做那种分分钟耗时数分钟，数十分钟的任务了~~~ 请酌情使用~~~ 保平安&lt;/p&gt;
&lt;h3 id="rkejob 如何配置使用"&gt;rkejob 如何配置使用&lt;/h3&gt;
&lt;p&gt;在 rkejob 程序的同目录下新建配置 config.yml&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;redis:
  host: localhost
  port: 6379

queue:
  pool: 30
  concurrency: 3
  namespace: "namespace_sidekiq"
  database: 0
  queues:
    - default

job:
  url: "https://www.xxx.com/myjobs"

crons:
  -
    name: "CheckServerStatus"
    url: "https://www.xxx.com/mycrons"
    spec: "0 0 3 * * *"   # 每天凌晨3点运行
  -
    name: "CheckXXXXXStatus"
    url: "https://www.xxx.com/mycrons"
    spec: "@every 10m"
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这样每一个队列任务都会被请求到 job.url 这个配置中，顺便会 sidekiq 请求过去的参数也一并请求到 rails-web 中了，下面会介绍 rails-web 端怎么处理这些数据。&lt;/p&gt;

&lt;p&gt;crons 就是配置定时任务了~ &lt;/p&gt;
&lt;h3 id="rails-web端要做的事"&gt;rails-web 端要做的事&lt;/h3&gt;
&lt;p&gt;rails 这边需要做呢？几乎不需要做任何任务改动，只需要加 2 个 action，分别处理 job 和 cron。&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;require 'yaml'

# 这个比较重要哦~ 因为写入到redis中的数据是可以直接被yaml解析成ruby代码的，会出问题，所以这个加个猴子补丁~~
Psych::Visitors::ToRuby.prepend Module.new {
  def resolve_class(klass_name)
    klass_name &amp;amp;&amp;amp; klass_name.safe_constantize || super
  end
}

class MyJobsController &amp;lt; ApplicationController

  skip_before_action :verify_authenticity_token, :only =&amp;gt; [:myjobs, :mycron]

  before_action :only_local

  # 队列
  #
  def myjobs
    request_body = request.raw_post
    (target, method_name, args) = YAML.load(request_body)

    if target.to_s == 'Mailer'
      eval("#{target}.#{method_name}(*args)").deliver_now()
    else
      eval("#{target}.new.#{method_name}(*args)")
    end
    render :text =&amp;gt; 'success'
  end

  # 定时任务
  #
  def mycron
    target = request.raw_post
    eval("#{target}.new.perform()")
    render :text =&amp;gt; 'success'
  end

  private

  # 这里最好加验证，禁止外网请求 ：）你懂的
  def only_local
    # if request.remote_ip != '127.0.0.1'
    #   redirect_to root_path
    # end
  end
end

&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="后话"&gt;后话&lt;/h3&gt;
&lt;p&gt;已在我的小破站上跑了几天了~~ 看日志来看~~~ 还可以~~~ &lt;/p&gt;

&lt;p&gt;golang 真是不错啊~~~&lt;/p&gt;
&lt;h2 id="重要的事，只说一遍…… 这玩意不适合跑非常耗时的任务哦~~~"&gt;重要的事，只说一遍…… 这玩意不适合跑非常耗时的任务哦~~~&lt;/h2&gt;</description>
      <author>moliliang</author>
      <pubDate>Mon, 15 May 2017 12:27:16 +0800</pubDate>
      <link>https://ruby-china.org/topics/32993</link>
      <guid>https://ruby-china.org/topics/32993</guid>
    </item>
    <item>
      <title>实现一个代码补全的思路</title>
      <description>&lt;p&gt;因为一直用的 rubymine，用 rubymine 主要是强大的代码补全，有比较快的工作效率。&lt;/p&gt;

&lt;p&gt;后来被同事安利了 vscode，这个东西也不错。&lt;/p&gt;

&lt;p&gt;但是 rails 的自动完成其实很一般。&lt;/p&gt;

&lt;p&gt;但是 pry 这个 gem 的 [tab] 键之后，有很多 rails 的动态方法：&lt;/p&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2017/2bd333a684072ca9923d3c9f4079cb36.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;如输入 User.find_ 之后，按下 [tab] 就能出现 rails 的动态方法。&lt;/p&gt;

&lt;p&gt;后来发现 pry 传入字符串，就可以得到返回的代码补全：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;require 'readline'
require 'pry/input_completer'
result = Pry::InputCompleter.new(Readline).call 'User.find_'
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;所以，我 fork 了 pry 这个 gem 包。&lt;/p&gt;

&lt;p&gt;加入了一段代码：
&lt;a href="https://github.com/molisoft/prycode/commit/2babee8ce55eca03f2af30daadd461522e20597d" rel="nofollow" target="_blank"&gt;https://github.com/molisoft/prycode/commit/2babee8ce55eca03f2af30daadd461522e20597d&lt;/a&gt;
也就是 http 功能。&lt;/p&gt;

&lt;p&gt;启动它：
&lt;img src="https://l.ruby-china.com/photo/2017/16e7ba69f7db20dff85f7763c8daee73.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;这样的话，就可以直接这样操作：
&lt;img src="https://l.ruby-china.com/photo/2017/5e830cda2342d1aa1e64e3b9619b2546.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;发起 http 请求“Array.d”就可以得到&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{"result":["up","isplay","efine_singleton_method","ebugger"]}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;其中的 up 就是 Array.dup , isplay 就是 Array.display ..&lt;/p&gt;

&lt;p&gt;所以，就可以给 vscode 写一个插件，来实现代码补全啦？或者 vim、emacs 等等编辑器&lt;/p&gt;

&lt;p&gt;于是没时间写。。&lt;/p&gt;

&lt;p&gt;而且 prycode 这个项目也不应该是这样写的。&lt;/p&gt;

&lt;p&gt;主要是 demo 目的。&lt;/p&gt;

&lt;p&gt;谁有时间，可以基于这个思路，实现一个通用的代码补全 呀。。。&lt;/p&gt;</description>
      <author>moliliang</author>
      <pubDate>Mon, 02 Jan 2017 15:16:45 +0800</pubDate>
      <link>https://ruby-china.org/topics/32038</link>
      <guid>https://ruby-china.org/topics/32038</guid>
    </item>
    <item>
      <title>最近找工作，发现自己落后并且迟钝了</title>
      <description>&lt;p&gt;想换个工作来着，最近面试了 2 公司～ 发现面试题中一些简单的算法题好吃力～&lt;/p&gt;

&lt;p&gt;今年打算继续把 ruby 和算法好好学一下，在把 angular.js 学了。&lt;/p&gt;

&lt;p&gt;买了 3 本书：&lt;/p&gt;

&lt;p&gt;算法导论、代码质量检查、Effective Ruby&lt;/p&gt;

&lt;p&gt;在不进步就落后了（已经落后了）～～～这种感觉好不爽啊～～～&lt;/p&gt;</description>
      <author>moliliang</author>
      <pubDate>Mon, 29 Feb 2016 14:46:43 +0800</pubDate>
      <link>https://ruby-china.org/topics/29153</link>
      <guid>https://ruby-china.org/topics/29153</guid>
    </item>
    <item>
      <title>今天到 dji 面试，太紧张…</title>
      <description>&lt;p&gt;今天到 dji 面试，特紧张，一片空白，总觉得他们的问题（应用场景）很复杂。&lt;/p&gt;

&lt;p&gt;其实问题都很基础也简单。&lt;/p&gt;

&lt;p&gt;有几个问题都是 after action 能解决的。&lt;/p&gt;

&lt;p&gt;… &lt;/p&gt;

&lt;p&gt;还有个画图的算法题，其实也简单… 我特么都不会答了… &lt;/p&gt;

&lt;p&gt;一出门思路就清晰了… &lt;/p&gt;

&lt;p&gt;大家面试的时候千万不要紧张啊… &lt;/p&gt;

&lt;p&gt;我就没机会了，要去 dji 的赶紧去投简历，妹子质量没得黑… &lt;/p&gt;

&lt;p&gt;心态一定要淡定… &lt;/p&gt;</description>
      <author>moliliang</author>
      <pubDate>Mon, 22 Feb 2016 17:19:12 +0800</pubDate>
      <link>https://ruby-china.org/topics/29053</link>
      <guid>https://ruby-china.org/topics/29053</guid>
    </item>
    <item>
      <title>bundle exec 执行 tasks 非常占用 CPU 啊～</title>
      <description>&lt;p&gt;网站最近性能时差时好（同一个页面），找来找去，发现 cpu 涨幅很有规律。&lt;/p&gt;

&lt;p&gt;后来发现是 crontab 中的定时任务导致（手动单独执行任务，cpu 马上飙升）。&lt;/p&gt;

&lt;p&gt;每次 crontab 中执行 bundle exec 某个 task 的时候，cpu 就飙升，然后接着网站变慢（单核 cpu）。&lt;/p&gt;

&lt;p&gt;因为有多个定时任务，尝试错开他们的执行时间，似乎缓解了一点，但是任然不能忍受啊～～&lt;/p&gt;

&lt;p&gt;为什么 bundle exec 这么占 cpu 啊。。即便 task 里面什么代码也没有，是因为每次都加载 rails 的原因吗？&lt;/p&gt;

&lt;p&gt;＝ ＝！&lt;/p&gt;</description>
      <author>moliliang</author>
      <pubDate>Thu, 15 Oct 2015 16:40:03 +0800</pubDate>
      <link>https://ruby-china.org/topics/27688</link>
      <guid>https://ruby-china.org/topics/27688</guid>
    </item>
    <item>
      <title>请教一个 Linux 问题，如何将一个服务器完全隐藏起来？</title>
      <description>&lt;p&gt;大家好，想请教一个问题：&lt;/p&gt;

&lt;p&gt;比如我有一台服务器 A，我想将 A 完全隐藏起来。&lt;/p&gt;

&lt;p&gt;然后还有一台服务器 B，然后我的任何请求，不管连接 B 服务器的任何端口（不是个别端口，是所有的），全部转到 B 服务器。&lt;/p&gt;

&lt;p&gt;将 B 服务器完全隐藏起来。。。请问如何做到呢。。。&lt;/p&gt;

&lt;p&gt;不知道 iptables 是否可以做到。。。&lt;/p&gt;</description>
      <author>moliliang</author>
      <pubDate>Sat, 29 Aug 2015 21:01:53 +0800</pubDate>
      <link>https://ruby-china.org/topics/27117</link>
      <guid>https://ruby-china.org/topics/27117</guid>
    </item>
    <item>
      <title>Rei 请教一个 HTML 的压缩问题</title>
      <description>&lt;p&gt;&lt;a href="/Rei" class="user-mention" title="@Rei"&gt;&lt;i&gt;@&lt;/i&gt;Rei&lt;/a&gt; 想请教一下 selfstore.io 的 html 的压缩（去掉空格回车等）是什么 gem 包呢？&lt;/p&gt;

&lt;p&gt;谢谢&lt;/p&gt;</description>
      <author>moliliang</author>
      <pubDate>Thu, 18 Jun 2015 14:16:35 +0800</pubDate>
      <link>https://ruby-china.org/topics/26086</link>
      <guid>https://ruby-china.org/topics/26086</guid>
    </item>
    <item>
      <title>关于 Devise 控制用户退出</title>
      <description>&lt;p&gt;大家好。。碰到一个问题。。
就是我想在后台让某个用户退出（不经过数据库，就是..不是根据某个特定的字段来判断用户是否退出）。&lt;/p&gt;

&lt;p&gt;或者说，某个用户正在网站上，我想让他退出（用户刷新后，就退出网站了）。&lt;/p&gt;

&lt;p&gt;直接调用 sign_out user 似乎不行。。。&lt;/p&gt;

&lt;p&gt;想删除用户 cookie 关联的 session，又找不到这个 session 保存在哪里……&lt;/p&gt;

&lt;p&gt;蛋好痛。。。&lt;/p&gt;</description>
      <author>moliliang</author>
      <pubDate>Tue, 03 Feb 2015 16:04:18 +0800</pubDate>
      <link>https://ruby-china.org/topics/24093</link>
      <guid>https://ruby-china.org/topics/24093</guid>
    </item>
    <item>
      <title>Rails update_column 和 update_attribute 诡异的问题</title>
      <description>&lt;p&gt;Rails 的版本是 3.2。&lt;/p&gt;

&lt;p&gt;碰到一个诡异的问题，是这样的。
我新建一个数据库字段 ABCD（boolean 型），然后因为需求改变，改成 integer 型。字段名称不变（依然是 ABCD）。&lt;/p&gt;

&lt;p&gt;然后我使用 update_attribute 来修改 ABCD 这个字段的值的时候，可以改成 0 或者 1，就是无法改成 2（或者说非 boolean 的值都不可以了）。
提示这个值是只读的。加上 readonly(false) 来进行查询，也无济于事。&lt;/p&gt;

&lt;p&gt;然后使用 update_column 来更新字段成功。&lt;/p&gt;

&lt;p&gt;因为 update_column 无需走 Rails 的验证流程，那么就是 update_attribute 走了验证流程，update_attribute 会验证这个值是否为 boolean 型。&lt;/p&gt;

&lt;p&gt;可是我已经彻底将该字段改成 int 型了，不管是数据库还是 Schema.rb 文件中。&lt;/p&gt;

&lt;p&gt;那么。。。为什么 update_attribute 来更新这个值就是无法成功呢（只能更新为 bool 型，无法是其他的整数）。。。&lt;/p&gt;

&lt;p&gt;谢谢。。。感觉是 Rails 的 bug。。。？＝ ＝&lt;/p&gt;</description>
      <author>moliliang</author>
      <pubDate>Fri, 30 Jan 2015 10:34:51 +0800</pubDate>
      <link>https://ruby-china.org/topics/24017</link>
      <guid>https://ruby-china.org/topics/24017</guid>
    </item>
    <item>
      <title>Yosemite 系统取消搜索功能，就不卡啦</title>
      <description>&lt;p&gt;之前发了帖子抱怨新的系统用久了很卡（合上盖子不关机；2014 年 15 寸新款）&lt;/p&gt;

&lt;p&gt;后来看到网上说是因为自带的搜索功能导致。&lt;/p&gt;

&lt;p&gt;然后我取消了所有的 Spotlight 索引项，然后重启电脑，似乎用了好几天，也不会卡啦？&lt;/p&gt;

&lt;p&gt;&lt;img src="http://cdn.rkidc.loveml.com/uploads/15011616294098A059A.png" title="" alt="搜索"&gt;&lt;/p&gt;</description>
      <author>moliliang</author>
      <pubDate>Fri, 16 Jan 2015 16:29:44 +0800</pubDate>
      <link>https://ruby-china.org/topics/23780</link>
      <guid>https://ruby-china.org/topics/23780</guid>
    </item>
    <item>
      <title>又到 alipay 续签的时候</title>
      <description>&lt;p&gt;啊！现在支付宝审核越来越严格了！
又是备案，又是要有商品什么的。。。续签能不能过呢。。。好紧张啊&lt;/p&gt;</description>
      <author>moliliang</author>
      <pubDate>Mon, 12 Jan 2015 13:50:05 +0800</pubDate>
      <link>https://ruby-china.org/topics/23681</link>
      <guid>https://ruby-china.org/topics/23681</guid>
    </item>
    <item>
      <title>我发现 macbook 一旦开始使用虚拟内存就没那么流畅了</title>
      <description>&lt;p&gt;最近一直觉得自己的 macbook 卡卡的（2014 年最新款 15 寸），因为我个人喜欢合上盖就走。。从来不关机。。&lt;/p&gt;

&lt;p&gt;然后感觉越来越卡，搜狗输入法都能感觉明显的延迟。。。重启后就正常了。。&lt;/p&gt;

&lt;p&gt;后来我发现，一旦系统开始使用虚拟内存，系统就开始没那么流畅了。&lt;/p&gt;

&lt;p&gt;比如四只手指在触摸板上向上滑动（所有的窗口排列出来），在系统没有使用虚拟内存的时候，是非常流畅的，一旦开始使用虚拟内存，就开始有点没那么流畅了。。。&lt;/p&gt;

&lt;p&gt;为什么呢。。。。可是 16G 内存啊。。似乎 osx 系统内存的优化并不好。。&lt;/p&gt;</description>
      <author>moliliang</author>
      <pubDate>Wed, 07 Jan 2015 17:28:24 +0800</pubDate>
      <link>https://ruby-china.org/topics/23595</link>
      <guid>https://ruby-china.org/topics/23595</guid>
    </item>
    <item>
      <title>支付宝即时到帐功能要备案了，哭晕在厕所</title>
      <description>&lt;p&gt;很早就申请了支付宝的即时到账功能，一直在使用。&lt;/p&gt;

&lt;p&gt;不过自己开发的一个新产品（新域名）没有写在支付宝的签约中。&lt;/p&gt;

&lt;p&gt;好不容易自己捣鼓个产品，收支平衡了。。&lt;/p&gt;

&lt;p&gt;结果支付宝发给我违约邮件，说我在其他域名使用了支付宝的即时到账功能。。&lt;/p&gt;

&lt;p&gt;要我 7 日内提交申请。。。&lt;/p&gt;

&lt;p&gt;然后我的服务器和域名都是国外的。。。&lt;/p&gt;

&lt;p&gt;没备案。。。&lt;/p&gt;

&lt;p&gt;结果审核就没通过。。。。啊啊啊啊啊啊啊啊啊啊啊啊啊啊&lt;/p&gt;

&lt;p&gt;哭晕在厕所。。。。&lt;/p&gt;

&lt;p&gt;请问不管违约邮件，能继续使用吗。。。。&lt;/p&gt;</description>
      <author>moliliang</author>
      <pubDate>Thu, 23 Oct 2014 00:11:28 +0800</pubDate>
      <link>https://ruby-china.org/topics/22204</link>
      <guid>https://ruby-china.org/topics/22204</guid>
    </item>
    <item>
      <title>sidekiq 如何跑 email 队列啊？</title>
      <description>&lt;p&gt;想问下 sidekiq 如何跑邮件队列呢。。。好烦啊&lt;/p&gt;

&lt;p&gt;设置了半天，启动的时候也加了-q mailer 参数。&lt;/p&gt;

&lt;p&gt;使用 sidekiq_mailer 这个 gem 包也跑不起来。。。&lt;/p&gt;

&lt;p&gt;参考官方帮助 使用 mail(xxx).deliver_later 又说这方法不存在。。。&lt;/p&gt;

&lt;p&gt;其他自定义的队列能跑，就是邮件队列跑不起来。。。所以很疑惑。。邮件队列到底怎么跑呢！~&lt;/p&gt;

&lt;p&gt;感谢！&lt;/p&gt;</description>
      <author>moliliang</author>
      <pubDate>Mon, 20 Oct 2014 20:10:53 +0800</pubDate>
      <link>https://ruby-china.org/topics/22143</link>
      <guid>https://ruby-china.org/topics/22143</guid>
    </item>
    <item>
      <title>shell 编程中 rm 命令的执行问题好奇怪</title>
      <description>&lt;p&gt;shell 编程初学，有一个 rm 删除文件的问题。&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;dir&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"/home/wwwroot/web/"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;dir&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;*"&lt;/span&gt;
&lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;dir&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.*"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;为什么 web 目录会被删掉呢。。。。&lt;/p&gt;

&lt;p&gt;谢谢~~~ = =&lt;/p&gt;</description>
      <author>moliliang</author>
      <pubDate>Mon, 29 Sep 2014 15:04:12 +0800</pubDate>
      <link>https://ruby-china.org/topics/21781</link>
      <guid>https://ruby-china.org/topics/21781</guid>
    </item>
    <item>
      <title>为什么网站的支付宝改成 https 就无法收到提醒了？</title>
      <description>&lt;p&gt;大家好，遇到个蛋疼的问题，关于网站的支付宝即时支付导致 notify 错误的问题。&lt;/p&gt;

&lt;p&gt;以前用的 http，一直没问题，现在改用 https 就出问题了。。&lt;/p&gt;

&lt;p&gt;notify_url 也改成 https 了。&lt;/p&gt;

&lt;p&gt;结果用户使用支付宝支付成功后，支付宝的 notify 请求变成了 400 错误（Nginx 访问日志）。&lt;/p&gt;

&lt;p&gt;我自己用工具模拟 post 请求 https 的 notify 链接，是可以返回“error”字符串的，说明链接没问题，毕竟我只是将 notify url 从 http 改成 https 而已。&lt;/p&gt;

&lt;p&gt;理论上木有问题啊。。求助。。。难道支付宝不支持 https。。。感谢&lt;/p&gt;

&lt;p&gt;我用的是：&lt;a href="https://ruby-china.org/topics/12992" rel="nofollow" target="_blank"&gt;https://ruby-china.org/topics/12992&lt;/a&gt; &lt;a href="/Rel" class="user-mention" title="@Rel"&gt;&lt;i&gt;@&lt;/i&gt;Rel&lt;/a&gt; 开发的 gem 插件。&lt;/p&gt;</description>
      <author>moliliang</author>
      <pubDate>Tue, 02 Sep 2014 12:46:11 +0800</pubDate>
      <link>https://ruby-china.org/topics/21342</link>
      <guid>https://ruby-china.org/topics/21342</guid>
    </item>
    <item>
      <title>RubyMine 占 CPU 很高啊</title>
      <description>&lt;p&gt;一般开启 2，3 个 rubymin，进程飙 cpu，搞的 macbook 很热。。。&lt;/p&gt;

&lt;p&gt;稳度基本都在 50-60 读左右。。。。&lt;/p&gt;

&lt;p&gt;蛋疼，冬天又冰冷的，夏天又烫死了。。。&lt;/p&gt;</description>
      <author>moliliang</author>
      <pubDate>Fri, 06 Jun 2014 11:02:43 +0800</pubDate>
      <link>https://ruby-china.org/topics/19778</link>
      <guid>https://ruby-china.org/topics/19778</guid>
    </item>
    <item>
      <title>Sidekiq 的队列底层是怎么搞的呢</title>
      <description>&lt;p&gt;sidekiq 是基于 redis 搞的，但是很疑惑，我改了代码后，重启队列后，队列还是会运行以前的代码。。。为什么。。&lt;/p&gt;</description>
      <author>moliliang</author>
      <pubDate>Sun, 25 May 2014 23:34:10 +0800</pubDate>
      <link>https://ruby-china.org/topics/19529</link>
      <guid>https://ruby-china.org/topics/19529</guid>
    </item>
  </channel>
</rss>
