<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>terrywang (Terry)</title>
    <link>https://ruby-china.org/terrywang</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>用 Nginx + php-fpm 跑 tweetnest 重写规则求教</title>
      <description>&lt;p&gt;从 Apache 迁移到 &lt;code&gt;Nginx&lt;/code&gt; + &lt;code&gt;php-fpm&lt;/code&gt; 后 tweetnest 的规则一直没搞定， &lt;code&gt;tweetnest&lt;/code&gt; 本身可用，但按月分页 &lt;code&gt;tweetnest/yyyy/mm&lt;/code&gt; 会 &lt;code&gt;404&lt;/code&gt;。&lt;/p&gt;

&lt;p&gt;tweetnest 默认只提供 apache 重写规则 &lt;code&gt;.htaccess)&lt;/code&gt; 如下。但未提供 Nginx 重写规则配置。&lt;/p&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;&lt;span class="n"&gt;RewriteEngine&lt;/span&gt; &lt;span class="n"&gt;On&lt;/span&gt;
 &lt;span class="n"&gt;RewriteBase&lt;/span&gt; /&lt;span class="n"&gt;tweetnest&lt;/span&gt;
 &lt;span class="n"&gt;RewriteRule&lt;/span&gt; ^&lt;span class="n"&gt;sort&lt;/span&gt;/?$ ./&lt;span class="n"&gt;sort&lt;/span&gt;.&lt;span class="n"&gt;php&lt;/span&gt; [&lt;span class="n"&gt;L&lt;/span&gt;]
 &lt;span class="n"&gt;RewriteRule&lt;/span&gt; ^&lt;span class="n"&gt;favorites&lt;/span&gt;/?$ ./&lt;span class="n"&gt;favorites&lt;/span&gt;.&lt;span class="n"&gt;php&lt;/span&gt; [&lt;span class="n"&gt;L&lt;/span&gt;]
 &lt;span class="n"&gt;RewriteRule&lt;/span&gt; ^&lt;span class="n"&gt;search&lt;/span&gt;/?$ ./&lt;span class="n"&gt;search&lt;/span&gt;.&lt;span class="n"&gt;php&lt;/span&gt; [&lt;span class="n"&gt;L&lt;/span&gt;]
 &lt;span class="n"&gt;RewriteRule&lt;/span&gt; ^([&lt;span class="m"&gt;0&lt;/span&gt;-&lt;span class="m"&gt;9&lt;/span&gt;]+)/([&lt;span class="m"&gt;0&lt;/span&gt;-&lt;span class="m"&gt;9&lt;/span&gt;]+)/?$ ./&lt;span class="n"&gt;month&lt;/span&gt;.&lt;span class="n"&gt;php&lt;/span&gt;?&lt;span class="n"&gt;y&lt;/span&gt;=$&lt;span class="m"&gt;1&lt;/span&gt;&amp;amp;&lt;span class="n"&gt;m&lt;/span&gt;=$&lt;span class="m"&gt;2&lt;/span&gt;
 &lt;span class="n"&gt;RewriteRule&lt;/span&gt; ^([&lt;span class="m"&gt;0&lt;/span&gt;-&lt;span class="m"&gt;9&lt;/span&gt;]+)/([&lt;span class="m"&gt;0&lt;/span&gt;-&lt;span class="m"&gt;9&lt;/span&gt;]+)/([&lt;span class="m"&gt;0&lt;/span&gt;-&lt;span class="m"&gt;9&lt;/span&gt;]+)/?$ ./&lt;span class="n"&gt;day&lt;/span&gt;.&lt;span class="n"&gt;php&lt;/span&gt;?&lt;span class="n"&gt;y&lt;/span&gt;=$&lt;span class="m"&gt;1&lt;/span&gt;&amp;amp;&lt;span class="n"&gt;m&lt;/span&gt;=$&lt;span class="m"&gt;2&lt;/span&gt;&amp;amp;&lt;span class="n"&gt;d&lt;/span&gt;=$&lt;span class="m"&gt;3&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;找到 &lt;a href="https://github.com/graulund/tweetnest/issues/37" rel="nofollow" target="_blank"&gt;https://github.com/graulund/tweetnest/issues/37&lt;/a&gt; 不过该配置是给 CNAME 的，而我是直接是 &lt;code&gt;domain.com/tweetnest&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;目前 Nginx vhost 配置块如下，访问 domain.com/tweetnest/yyyy/mm 会 404 请教一下如何修改。&lt;/p&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;&lt;span class="c"&gt;# tweetnest rewrite rules
&lt;/span&gt;&lt;span class="n"&gt;location&lt;/span&gt; ~ /&lt;span class="n"&gt;tweetnest&lt;/span&gt; {
    &lt;span class="n"&gt;root&lt;/span&gt; /&lt;span class="n"&gt;var&lt;/span&gt;/&lt;span class="n"&gt;www&lt;/span&gt;/&lt;span class="n"&gt;path&lt;/span&gt;;
    &lt;span class="n"&gt;rewrite&lt;/span&gt; ^/&lt;span class="n"&gt;sort&lt;/span&gt;/?$ &lt;span class="n"&gt;sort&lt;/span&gt;.&lt;span class="n"&gt;php&lt;/span&gt; &lt;span class="n"&gt;last&lt;/span&gt;;
    &lt;span class="n"&gt;rewrite&lt;/span&gt; ^/&lt;span class="n"&gt;favorites&lt;/span&gt;/?$ &lt;span class="n"&gt;favorites&lt;/span&gt;.&lt;span class="n"&gt;php&lt;/span&gt; &lt;span class="n"&gt;last&lt;/span&gt;;
    &lt;span class="n"&gt;rewrite&lt;/span&gt; ^/&lt;span class="n"&gt;search&lt;/span&gt;/?$ &lt;span class="n"&gt;search&lt;/span&gt;.&lt;span class="n"&gt;php&lt;/span&gt; &lt;span class="n"&gt;last&lt;/span&gt;;
    &lt;span class="n"&gt;rewrite&lt;/span&gt; ^/([&lt;span class="m"&gt;0&lt;/span&gt;-&lt;span class="m"&gt;9&lt;/span&gt;]+)/([&lt;span class="m"&gt;0&lt;/span&gt;-&lt;span class="m"&gt;9&lt;/span&gt;]+)/?$ &lt;span class="n"&gt;month&lt;/span&gt;.&lt;span class="n"&gt;php&lt;/span&gt;?&lt;span class="n"&gt;y&lt;/span&gt;=$&lt;span class="m"&gt;1&lt;/span&gt;&amp;amp;&lt;span class="n"&gt;m&lt;/span&gt;=$&lt;span class="m"&gt;2&lt;/span&gt;;
    &lt;span class="n"&gt;rewrite&lt;/span&gt; ^/([&lt;span class="m"&gt;0&lt;/span&gt;-&lt;span class="m"&gt;9&lt;/span&gt;]+)/([&lt;span class="m"&gt;0&lt;/span&gt;-&lt;span class="m"&gt;9&lt;/span&gt;]+)/([&lt;span class="m"&gt;0&lt;/span&gt;-&lt;span class="m"&gt;9&lt;/span&gt;]+)/?$ &lt;span class="n"&gt;day&lt;/span&gt;.&lt;span class="n"&gt;php&lt;/span&gt;?&lt;span class="n"&gt;y&lt;/span&gt;=$&lt;span class="m"&gt;1&lt;/span&gt;&amp;amp;&lt;span class="n"&gt;m&lt;/span&gt;=$&lt;span class="m"&gt;2&lt;/span&gt;&amp;amp;&lt;span class="n"&gt;d&lt;/span&gt;=$&lt;span class="m"&gt;3&lt;/span&gt;;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;完整的 Nginx 配置如下，谢谢。&lt;/p&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;&lt;span class="n"&gt;upstream&lt;/span&gt; &lt;span class="n"&gt;php&lt;/span&gt; {
    &lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="n"&gt;unix&lt;/span&gt;:/&lt;span class="n"&gt;var&lt;/span&gt;/&lt;span class="n"&gt;run&lt;/span&gt;/&lt;span class="n"&gt;php5&lt;/span&gt;-&lt;span class="n"&gt;fpm&lt;/span&gt;.&lt;span class="n"&gt;sock&lt;/span&gt;;
}

&lt;span class="n"&gt;server&lt;/span&gt; {
    &lt;span class="n"&gt;listen&lt;/span&gt;   *:&lt;span class="m"&gt;80&lt;/span&gt;;

    &lt;span class="n"&gt;root&lt;/span&gt; /&lt;span class="n"&gt;var&lt;/span&gt;/&lt;span class="n"&gt;www&lt;/span&gt;/&lt;span class="n"&gt;path&lt;/span&gt;/&lt;span class="n"&gt;to&lt;/span&gt;/&lt;span class="n"&gt;root&lt;/span&gt;;
    &lt;span class="n"&gt;index&lt;/span&gt; &lt;span class="n"&gt;index&lt;/span&gt;.&lt;span class="n"&gt;php&lt;/span&gt; &lt;span class="n"&gt;index&lt;/span&gt;.&lt;span class="n"&gt;html&lt;/span&gt; &lt;span class="n"&gt;index&lt;/span&gt;.&lt;span class="n"&gt;htm&lt;/span&gt;;

    &lt;span class="n"&gt;server_name&lt;/span&gt; &lt;span class="n"&gt;domain&lt;/span&gt;.&lt;span class="n"&gt;com&lt;/span&gt; &lt;span class="n"&gt;www&lt;/span&gt;.&lt;span class="n"&gt;domain&lt;/span&gt;.&lt;span class="n"&gt;com&lt;/span&gt;;
    &lt;span class="c"&gt;# rewrite ^(.*)$ $scheme://www.domain.com$1;
&lt;/span&gt;
    &lt;span class="n"&gt;access_log&lt;/span&gt; /&lt;span class="n"&gt;var&lt;/span&gt;/&lt;span class="n"&gt;log&lt;/span&gt;/&lt;span class="n"&gt;nginx&lt;/span&gt;/&lt;span class="n"&gt;domain&lt;/span&gt;.&lt;span class="n"&gt;com&lt;/span&gt;-&lt;span class="n"&gt;access&lt;/span&gt;.&lt;span class="n"&gt;log&lt;/span&gt;;
    &lt;span class="n"&gt;error_log&lt;/span&gt; /&lt;span class="n"&gt;var&lt;/span&gt;/&lt;span class="n"&gt;log&lt;/span&gt;/&lt;span class="n"&gt;nginx&lt;/span&gt;/&lt;span class="n"&gt;domain&lt;/span&gt;.&lt;span class="n"&gt;com&lt;/span&gt;-&lt;span class="n"&gt;error&lt;/span&gt;.&lt;span class="n"&gt;log&lt;/span&gt;;

    &lt;span class="n"&gt;location&lt;/span&gt; / {
        &lt;span class="c"&gt;# First attempt to serve request as file, then
&lt;/span&gt;        &lt;span class="c"&gt;# as directory, then fall back to index.html
&lt;/span&gt;        &lt;span class="n"&gt;try_files&lt;/span&gt; $&lt;span class="n"&gt;uri&lt;/span&gt; $&lt;span class="n"&gt;uri&lt;/span&gt;/ /&lt;span class="n"&gt;index&lt;/span&gt;.&lt;span class="n"&gt;html&lt;/span&gt;;
    }

    &lt;span class="n"&gt;location&lt;/span&gt; ~ \.&lt;span class="n"&gt;php&lt;/span&gt;$ {
        &lt;span class="n"&gt;try_files&lt;/span&gt; $&lt;span class="n"&gt;uri&lt;/span&gt; =&lt;span class="m"&gt;404&lt;/span&gt;;
        &lt;span class="n"&gt;fastcgi_index&lt;/span&gt; &lt;span class="n"&gt;index&lt;/span&gt;.&lt;span class="n"&gt;php&lt;/span&gt;;
        &lt;span class="n"&gt;include&lt;/span&gt; &lt;span class="n"&gt;fastcgi_params&lt;/span&gt;;
        &lt;span class="c"&gt;# fastcgi_pass unix:/var/run/php5-fpm.sock;
&lt;/span&gt;        &lt;span class="c"&gt;# Use upstream
&lt;/span&gt;        &lt;span class="n"&gt;fastcgi_pass&lt;/span&gt; &lt;span class="n"&gt;php&lt;/span&gt;;
    }

    &lt;span class="n"&gt;location&lt;/span&gt; = /&lt;span class="n"&gt;favicon&lt;/span&gt;.&lt;span class="n"&gt;ico&lt;/span&gt; {
        &lt;span class="n"&gt;log_not_found&lt;/span&gt; &lt;span class="n"&gt;off&lt;/span&gt;;
        &lt;span class="n"&gt;access_log&lt;/span&gt; &lt;span class="n"&gt;off&lt;/span&gt;;
    }

    &lt;span class="n"&gt;location&lt;/span&gt; = /&lt;span class="n"&gt;robots&lt;/span&gt;.&lt;span class="n"&gt;txt&lt;/span&gt; {
        &lt;span class="n"&gt;allow&lt;/span&gt; &lt;span class="n"&gt;all&lt;/span&gt;;
        &lt;span class="n"&gt;log_not_found&lt;/span&gt; &lt;span class="n"&gt;off&lt;/span&gt;;
        &lt;span class="n"&gt;access_log&lt;/span&gt; &lt;span class="n"&gt;off&lt;/span&gt;;
    }

    &lt;span class="n"&gt;location&lt;/span&gt; ~ /\. {
        &lt;span class="n"&gt;deny&lt;/span&gt; &lt;span class="n"&gt;all&lt;/span&gt;;
    }

    &lt;span class="n"&gt;location&lt;/span&gt; ~* (?:\.(?:&lt;span class="n"&gt;bak&lt;/span&gt;|&lt;span class="n"&gt;config&lt;/span&gt;|&lt;span class="n"&gt;sql&lt;/span&gt;|&lt;span class="n"&gt;fla&lt;/span&gt;|&lt;span class="n"&gt;psd&lt;/span&gt;|&lt;span class="n"&gt;ini&lt;/span&gt;|&lt;span class="n"&gt;log&lt;/span&gt;|&lt;span class="n"&gt;sh&lt;/span&gt;|&lt;span class="n"&gt;inc&lt;/span&gt;|&lt;span class="n"&gt;swp&lt;/span&gt;|&lt;span class="n"&gt;dist&lt;/span&gt;)|~)$ {
        &lt;span class="n"&gt;deny&lt;/span&gt; &lt;span class="n"&gt;all&lt;/span&gt;;
    }

    &lt;span class="c"&gt;# Browser cache
&lt;/span&gt;    &lt;span class="n"&gt;location&lt;/span&gt; ~* ^.+\.(&lt;span class="n"&gt;css&lt;/span&gt;|&lt;span class="n"&gt;js&lt;/span&gt;|&lt;span class="n"&gt;jpg&lt;/span&gt;|&lt;span class="n"&gt;jpeg&lt;/span&gt;|&lt;span class="n"&gt;gif&lt;/span&gt;|&lt;span class="n"&gt;png&lt;/span&gt;|&lt;span class="n"&gt;ico&lt;/span&gt;|&lt;span class="n"&gt;gz&lt;/span&gt;|&lt;span class="n"&gt;svg&lt;/span&gt;|&lt;span class="n"&gt;svgz&lt;/span&gt;|&lt;span class="n"&gt;ttf&lt;/span&gt;|&lt;span class="n"&gt;otf&lt;/span&gt;|&lt;span class="n"&gt;woff&lt;/span&gt;|&lt;span class="n"&gt;eot&lt;/span&gt;|&lt;span class="n"&gt;mp4&lt;/span&gt;|&lt;span class="n"&gt;ogg&lt;/span&gt;|&lt;span class="n"&gt;ogv&lt;/span&gt;|&lt;span class="n"&gt;webm&lt;/span&gt;)$ {
        &lt;span class="n"&gt;expires&lt;/span&gt; &lt;span class="m"&gt;30&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;;
        &lt;span class="n"&gt;log_not_found&lt;/span&gt; &lt;span class="n"&gt;off&lt;/span&gt;;
    }

    &lt;span class="c"&gt;# tweetnest rewrite rules
&lt;/span&gt;    &lt;span class="n"&gt;location&lt;/span&gt; ~ /&lt;span class="n"&gt;tweetnest&lt;/span&gt; {
        &lt;span class="c"&gt;# root /var/www/terry.im;
&lt;/span&gt;        &lt;span class="n"&gt;rewrite&lt;/span&gt; ^/&lt;span class="n"&gt;sort&lt;/span&gt;/?$ &lt;span class="n"&gt;sort&lt;/span&gt;.&lt;span class="n"&gt;php&lt;/span&gt; &lt;span class="n"&gt;last&lt;/span&gt;;
        &lt;span class="n"&gt;rewrite&lt;/span&gt; ^/&lt;span class="n"&gt;favorites&lt;/span&gt;/?$ &lt;span class="n"&gt;favorites&lt;/span&gt;.&lt;span class="n"&gt;php&lt;/span&gt; &lt;span class="n"&gt;last&lt;/span&gt;;
        &lt;span class="n"&gt;rewrite&lt;/span&gt; ^/&lt;span class="n"&gt;search&lt;/span&gt;/?$ &lt;span class="n"&gt;search&lt;/span&gt;.&lt;span class="n"&gt;php&lt;/span&gt; &lt;span class="n"&gt;last&lt;/span&gt;;
        &lt;span class="n"&gt;rewrite&lt;/span&gt; ^/([&lt;span class="m"&gt;0&lt;/span&gt;-&lt;span class="m"&gt;9&lt;/span&gt;]+)/([&lt;span class="m"&gt;0&lt;/span&gt;-&lt;span class="m"&gt;9&lt;/span&gt;]+)/?$ &lt;span class="n"&gt;month&lt;/span&gt;.&lt;span class="n"&gt;php&lt;/span&gt;?&lt;span class="n"&gt;y&lt;/span&gt;=$&lt;span class="m"&gt;1&lt;/span&gt;&amp;amp;&lt;span class="n"&gt;m&lt;/span&gt;=$&lt;span class="m"&gt;2&lt;/span&gt;;
        &lt;span class="n"&gt;rewrite&lt;/span&gt; ^/([&lt;span class="m"&gt;0&lt;/span&gt;-&lt;span class="m"&gt;9&lt;/span&gt;]+)/([&lt;span class="m"&gt;0&lt;/span&gt;-&lt;span class="m"&gt;9&lt;/span&gt;]+)/([&lt;span class="m"&gt;0&lt;/span&gt;-&lt;span class="m"&gt;9&lt;/span&gt;]+)/?$ &lt;span class="n"&gt;day&lt;/span&gt;.&lt;span class="n"&gt;php&lt;/span&gt;?&lt;span class="n"&gt;y&lt;/span&gt;=$&lt;span class="m"&gt;1&lt;/span&gt;&amp;amp;&lt;span class="n"&gt;m&lt;/span&gt;=$&lt;span class="m"&gt;2&lt;/span&gt;&amp;amp;&lt;span class="n"&gt;d&lt;/span&gt;=$&lt;span class="m"&gt;3&lt;/span&gt;;
    }
}
&lt;/code&gt;&lt;/pre&gt;</description>
      <author>terrywang</author>
      <pubDate>Wed, 25 Jun 2014 08:38:52 +0800</pubDate>
      <link>https://ruby-china.org/topics/20148</link>
      <guid>https://ruby-china.org/topics/20148</guid>
    </item>
    <item>
      <title>澳洲移民部将厨师和砖瓦匠添加到职业技能列表</title>
      <description>&lt;p&gt;澳洲移民部将厨师，砖匠和瓦匠添加到技能职业列表，7 月起工作签证持有者无需雇主担保即可申请永居。学会一门手艺很重要啊，呵呵。&lt;/p&gt;

&lt;p&gt;现在 IT 独立技术移民不如厨师和砖瓦匠 ;-D&lt;/p&gt;

&lt;p&gt;新闻： &lt;a href="http://www.sbs.com.au/news/article/2014/06/07/bricklayers-tilers-chefs-added-skilled-migration-program" rel="nofollow" target="_blank"&gt;http://www.sbs.com.au/news/article/2014/06/07/bricklayers-tilers-chefs-added-skilled-migration-program&lt;/a&gt;&lt;/p&gt;</description>
      <author>terrywang</author>
      <pubDate>Tue, 17 Jun 2014 12:14:30 +0800</pubDate>
      <link>https://ruby-china.org/topics/19994</link>
      <guid>https://ruby-china.org/topics/19994</guid>
    </item>
    <item>
      <title>求推荐开源的 IT 设备 / 资产管理系统</title>
      <description>&lt;p&gt;所在的团队有很多移动设备，测试用的笔记本，台式机和硬盘，内存条等等设备。经常不知道测试用的 iPad / Android 平板 MacBook Pro 或外置 DVD 驱动器，充电器在谁手里，现在只能群发邮件问。&lt;/p&gt;

&lt;p&gt;准备上一个开源的 IT 设备管理系统来统一管理 lab 设备。&lt;/p&gt;

&lt;p&gt;试过 Open-AudIT 感觉不好用，安装过程也很山寨。OCS Inventory NG 则感觉重和复杂，用不到。&lt;/p&gt;

&lt;p&gt;昨天发现了 GitHub 上的 &lt;a href="https://github.com/snipe/snipe-it" rel="nofollow" target="_blank"&gt;https://github.com/snipe/snipe-it&lt;/a&gt; 感觉不错，准备试一下，不过这货还在 alpha ...&lt;/p&gt;

&lt;p&gt;求推荐好用的 web-based 开源 IT 设备和资源管理系统，能登记，追踪，审计设备。轻快简单好用即可（若是 Ruby 的，不要比 GitLab 复杂就可以了，呵呵），不需要复杂高端的功能，谢谢。&lt;/p&gt;</description>
      <author>terrywang</author>
      <pubDate>Sun, 04 May 2014 10:02:46 +0800</pubDate>
      <link>https://ruby-china.org/topics/18989</link>
      <guid>https://ruby-china.org/topics/18989</guid>
    </item>
  </channel>
</rss>
