<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>luoping0425 (罗平)</title>
    <link>https://ruby-china.org/luoping0425</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>[上海] 郎客信息技术有限公司招聘 Rails 2 名</title>
      <description>&lt;p&gt;我们是一家提供医药互联网服务的公司，目前主要项目为微信公众号、医药服务类网站、微店的运营维护。&lt;/p&gt;

&lt;p&gt;公司网站：&lt;a href="http://www.lankr.cn/" rel="nofollow" target="_blank"&gt;http://www.lankr.cn/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;地点：靠近 13 号线真北路地铁站&lt;/p&gt;

&lt;p&gt;我们提供：&lt;/p&gt;

&lt;p&gt;宽松自由的工作氛围、扁平话的公司管理结构&lt;/p&gt;

&lt;p&gt;Mac + 显示器&lt;/p&gt;

&lt;p&gt;工作时间：10:00 ~ 19:00 或 自由调节，无打卡，中午一小时休息&lt;/p&gt;

&lt;p&gt;我们在一起做什么工作：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;参与电商平台功能设计、开发和实现&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;大数据项目的开发、数据分析&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;希望你能够：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;1~3 年 ruby/rails 开发经验；&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;熟练使用 mysql, postgres 等数据库；&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;对前端 (html/css) 有一定的了解，熟练使用 JS，了解 bootstrap 等前端框架；&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;熟悉 Linux 系统；&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;熟练使用 Git；&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;良好的代码书写规范。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;具有良好的沟通能力和团队合作精神；&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;你会收获：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;15-20K/月；&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;带薪团队旅行；&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;早上 10 点上班；&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;与技术团队共同成长，不定期邀请外部 Ruby 项目大牛来培训；&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;全 Mac 工作环境；&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;工作地址&lt;/p&gt;

&lt;p&gt;上海 - 普陀区 - 长征 - 金沙江路近铁城市广场北座 622&lt;/p&gt;

&lt;p&gt;如果你有兴趣，请联系：job@lankr.cn&lt;/p&gt;

&lt;p&gt;另外：我们也招收实习生，以及有其他语言转 ruby 相关也可以。&lt;/p&gt;

&lt;p&gt;疫情期间可远程面试，远程工作&lt;/p&gt;</description>
      <author>luoping0425</author>
      <pubDate>Tue, 08 Oct 2019 10:18:20 +0800</pubDate>
      <link>https://ruby-china.org/topics/39117</link>
      <guid>https://ruby-china.org/topics/39117</guid>
    </item>
    <item>
      <title>[上海] 郎客信息技术有限公司招聘 Rails 实习生 2 名</title>
      <description>&lt;p&gt;我们是一家提供医药互联网服务的公司，目前主要项目为微信公众号、医药服务类网站、微店的运营维护。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;公司网站：&lt;a href="http://www.lankr.cn/" rel="nofollow" target="_blank"&gt;http://www.lankr.cn/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;地点：靠近 13 号线真北路地铁站&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;我们提供：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;宽松自由的工作氛围、扁平话的公司管理结构&lt;/li&gt;
&lt;li&gt;Mac + 显示器&lt;/li&gt;
&lt;li&gt;&lt;p&gt;工作时间：10:00 ~ 18:30 或 自由调节，无打卡，中午一小时休息&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;如果你是即将毕业的学生，则无需担心请假问题&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;现招聘 Rails 实习生 2 名，希望你是：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;大学本科，主修计算机科学或相关专业，应届毕业生也可以；&lt;/li&gt;
&lt;li&gt;基本的英语能力；&lt;/li&gt;
&lt;li&gt;对 Web 技术、数据库、LINUX 操作系统操作系统有一定的了解。&lt;/li&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;/p&gt;

&lt;p&gt;如果你有兴趣，请联系：luoping@lankr.cn&lt;/p&gt;</description>
      <author>luoping0425</author>
      <pubDate>Tue, 23 May 2017 17:10:08 +0800</pubDate>
      <link>https://ruby-china.org/topics/33048</link>
      <guid>https://ruby-china.org/topics/33048</guid>
    </item>
    <item>
      <title>求助：阿里云服务器一直 down 掉，加了防火墙</title>
      <description>&lt;p&gt;阿里云服务器（ubuntu)，这两天一直挂掉 ( 网站不能访问 + 不能 ssh )，加了防火墙，fail2ban 和 ufw，
用的 unicorn，不知道什么原因。
查看日志，是有 各种 ssh 尝试登陆，难道是这个原因？&lt;/p&gt;</description>
      <author>luoping0425</author>
      <pubDate>Fri, 01 Jul 2016 06:51:03 +0800</pubDate>
      <link>https://ruby-china.org/topics/30418</link>
      <guid>https://ruby-china.org/topics/30418</guid>
    </item>
    <item>
      <title>有没有人愿意成立读书小组？</title>
      <description>&lt;p&gt;好多书翻了几页，然后就读不下去了，各种原因，没时间，最近加班，看不下去。&lt;/p&gt;

&lt;p&gt;是否有人愿意一起讨论所读的书，或者约定一定时间读一本书，然后大家讨论自己的想法，或者有问题可以相互问？&lt;/p&gt;</description>
      <author>luoping0425</author>
      <pubDate>Wed, 25 May 2016 10:00:47 +0800</pubDate>
      <link>https://ruby-china.org/topics/30117</link>
      <guid>https://ruby-china.org/topics/30117</guid>
    </item>
    <item>
      <title>gem pristine 的用法例子</title>
      <description>&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;gem&lt;/span&gt; &lt;span class="n"&gt;pristine&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;GEMNAME&lt;/span&gt; &lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;作用：&lt;/p&gt;

&lt;p&gt;比较已经安装的 gem 和缓存的.gem file, 如果和缓存的 .gem 不匹配，则恢复原始的文件
如果修改过已经安装的 gem 包，pristine 将会恢复它。所有的扩展会 rebuild，所有的 bin 如果发现有更改会重新生成。
如果缓存的文件不存在，则重新下载。&lt;/p&gt;

&lt;p&gt;详细参考：&lt;a href="http://guides.rubygems.org/command-reference/#gem-pristine" rel="nofollow" target="_blank"&gt;http://guides.rubygems.org/command-reference/#gem-pristine&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;例子：
mysql 升级到了 5.7.9
原有 rails 项目使用 mysql2，运行 &lt;code&gt;rake db:migrate&lt;/code&gt; 会报错：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="no"&gt;Library&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="ss"&gt;loaded: &lt;/span&gt;&lt;span class="sr"&gt;/usr/&lt;/span&gt;&lt;span class="n"&gt;local&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;lib&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;libmysqlclient&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dylib&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;发现新安装的 mysql 其实使用的是 libmysqlclient.20.dylib，版本不一致。&lt;/p&gt;

&lt;p&gt;解决方案：&lt;a href="http://stackoverflow.com/questions/33772047/library-not-loaded-usr-local-lib-libmysqlclient-18-dylib" rel="nofollow" target="_blank"&gt;http://stackoverflow.com/questions/33772047/library-not-loaded-usr-local-lib-libmysqlclient-18-dylib&lt;/a&gt;&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;gem pristine mysql2
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;之后继续 &lt;code&gt;rake db:migrate&lt;/code&gt;，遇到&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ActiveRecord::StatementInvalid: Mysql2::Error: Table &lt;span class="s1"&gt;'performance_schema.session_variables'&lt;/span&gt; doesn&lt;span class="s1"&gt;'t exist: SHOW VARIABLES LIKE '&lt;/span&gt;character_set_database&lt;span class="s1"&gt;'
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;需要升级数据库 &lt;a href="http://stackoverflow.com/questions/31967527/table-performance-schema-session-variables-doesnt-exist" rel="nofollow" target="_blank"&gt;http://stackoverflow.com/questions/31967527/table-performance-schema-session-variables-doesnt-exist&lt;/a&gt;&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;mysql_upgrade &lt;span class="nt"&gt;-u&lt;/span&gt; root &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="nt"&gt;--force&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后重启 mysql，ok。&lt;/p&gt;</description>
      <author>luoping0425</author>
      <pubDate>Fri, 11 Dec 2015 07:06:16 +0800</pubDate>
      <link>https://ruby-china.org/topics/28346</link>
      <guid>https://ruby-china.org/topics/28346</guid>
    </item>
    <item>
      <title>capistrano 部署的 task 应该写在 capfile 还是 config/deploy.rb</title>
      <description>&lt;p&gt;求问：capistrano 部署的 task 应该写在 capfile 还是 config/deploy.rb。&lt;/p&gt;

&lt;p&gt;我们现在的部署脚本一直是写在 &lt;code&gt;config/deploy.rb&lt;/code&gt; 中，之前忘记哪里看到可以写到 Capfile 中，capistrano 中的 wiki 中也说到：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;The Capfile is where you will tell Capistrano about the servers you want to connect to and the tasks you want to perform on those servers. 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a href="https://github.com/capistrano/capistrano/wiki/2.x-Getting-Started" rel="nofollow" target="_blank"&gt;https://github.com/capistrano/capistrano/wiki/2.x-Getting-Started&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;想知道大家平常是怎么写的，还有为什么这样写？&lt;/p&gt;</description>
      <author>luoping0425</author>
      <pubDate>Wed, 15 Aug 2012 16:38:52 +0800</pubDate>
      <link>https://ruby-china.org/topics/4960</link>
      <guid>https://ruby-china.org/topics/4960</guid>
    </item>
    <item>
      <title>unicorn 使用简介</title>
      <description>&lt;p&gt;Unicorn 是什么？&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;为 Rack 应用程序设计的 HTTP server&lt;/li&gt;
&lt;li&gt;是一个利用 Unix 的高级特性开发的&lt;/li&gt;
&lt;li&gt;为具备低延迟，高带宽的连接的客户服务&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;特性：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;为 Rack，Unix，快速的客户端和易调试而设计。&lt;/li&gt;
&lt;li&gt;完全兼容 Ruby 1.8 和 1.9。&lt;/li&gt;
&lt;li&gt;进程管理：Unicorn 会获取和重启因应用程序出错导致死亡的任务，不需要自己管理多个进程和端口。Unicorn 可以产生和管理任何数量的任务进程。&lt;/li&gt;
&lt;li&gt;负载均衡完全由操作系统 (Unix) 核心完成。在繁忙的任务进程时，请求也不会堆积。&lt;/li&gt;
&lt;li&gt;不需要关心应用程序是否是线程安全的，workers 运行在特们自己独立的地址空间，且一次只为一个客户端服务。&lt;/li&gt;
&lt;li&gt;支持所有的 Rack 应用程序。&lt;/li&gt;
&lt;li&gt;使用 USR1 信号来固定重复打开应用程序的所有日志文件。Unicorn 也可以逐步的确定一个请求的多行日志放在同一个文件中。&lt;/li&gt;
&lt;li&gt;nginx 式的二进制升级，不丢失连接。你可以升级 Unicorn、你的整个应用程序、库、甚至 Ruby 编辑器而不丢失客户端连接。&lt;/li&gt;
&lt;li&gt;在 fork 进程时如果由特殊需求可以使用 before_fork 和 after_fork。如果“preload_app“为 false 时，则不能使用。&lt;/li&gt;
&lt;li&gt;可以使用 copy-on-wirte-friendly 内存管理来节约内容（通过设置“preload_app" 为 true）。&lt;/li&gt;
&lt;li&gt;可以监听多接口，包括：UNIX sockets，每个 worker process 也可以在简单调试时通过 after_fork 钩子绑定到私有的端口。&lt;/li&gt;
&lt;li&gt;配置使用简单易用的 Ruby DSL。&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;安装：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ gem install unicorn
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;配置：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# 设定 GEM_HOME
GEM_HOME = "/Users/P.Luo/.rvm/gems/ruby-1.8.7-p340@project_name"

# 获取当前项目路径
require 'pathname'
path = Pathname.new(__FILE__).realpath # 当前文件完整路径
path = path.sub('/config/unicorn.rb', '')
APP_PATH = path.to_s

# 或直接填写
# APP_PATH = "/path_to_project/workspace/project_name"

# worker 数
worker_processes 20

# 项目目录，部署后的项目指向 current，如：/srv/project_name/current
working_directory APP_PATH 

# we use a shorter backlog for quicker failover when busy
# 可同时监听 Unix 本地 socket 或 TCP 端口
listen "/tmp/project_name.sock", :backlog =&amp;gt; 64
# 开启tcp 端口，可不使用 apache 或 nginx 做代理，直接本地：http://localhost:port
#listen 8080, :tcp_nopush =&amp;gt; true

# 如果为 REE，则添加 copy_on_wirte_friendly
# http://www.rubyenterpriseedition.com/faq.html#adapt_apps_for_cow
if GC.respond_to?(:copy_on_write_friendly=)
  GC.copy_on_write_friendly = true
end

# request 超时时间，超过此时间则自动将此请求杀掉，单位为秒
timeout 180

# unicorn master pid
# unicorn pid 存放路径
pid APP_PATH + "/tmp/pids/unicorn.pid"

# unicorn 日志
stderr_path APP_PATH + "/log/unicorn.stderr.log"
stdout_path APP_PATH + "/log/unicorn.stdout.log"

preload_app true

before_fork do |server, worker|
  defined?(ActiveRecord::Base) and
    ActiveRecord::Base.connection.disconnect!
end

after_fork do |server, worker|
  defined?(ActiveRecord::Base) and
    ActiveRecord::Base.establish_connection
end
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;使用：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;非 Rails Rack 应用程序：
 unicorn&lt;/li&gt;
&lt;li&gt;Rails 应用程序（支持 Rails 1.2 及之后的版本）
unicorn_rails&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;参数说明：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;unicorn 会默认绑定到 8080 端口，可以使用 --listen/-l 来选择到不同的 address:port 或者使用 UNIX socket.&lt;/li&gt;
&lt;li&gt;-D 以 Deamon 形式启动&lt;/li&gt;
&lt;li&gt;-c 设定配置文件，如我们的 /workspace/project_name/config/unicorn.rb&lt;/li&gt;
&lt;li&gt;-E 设定生产环境或开发环境，如 -E production&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;例：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ unicorn_rails -E production -D -c /srv/project_name/current/config/unicorn.rb 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;重启：
方法一：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ ps auwx | grep unicorn
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;获取：master 的 pid
如&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ kill -9 17357
$ unicorn_rails -E production -D -c /srv/project_name/current/config/unicorn.rb 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;方法二：
在/etc/init.d/ 目录下添加 init 脚本：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ sudo /etc/init.d/unicorn.project_name
Usage: /etc/init.d/unicorn.project_name &amp;lt;start|stop|restart|upgrade|force-stop|reopen-logs&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;可以运行：sudo /etc/init.d/unicorn.project_name 来进行项目重启、停止、启动...&lt;/p&gt;

&lt;p&gt;init 脚本示例（请更改 APP_ROOT － 项目目录 和 APP_USER － 项目所属用户 的值）：&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/bin/sh&lt;/span&gt;
&lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt;

&lt;span class="c"&gt;# Feel free to change any of the following variables for your app:&lt;/span&gt;
&lt;span class="nv"&gt;TIMEOUT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;TIMEOUT&lt;/span&gt;&lt;span class="p"&gt;-60&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;
&lt;span class="nv"&gt;APP_ROOT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/srv/project_name/current
&lt;span class="nv"&gt;APP_USER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;username
&lt;span class="nv"&gt;PID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$APP_ROOT&lt;/span&gt;/tmp/pids/unicorn.pid
&lt;span class="nv"&gt;ENV&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;production
&lt;span class="nv"&gt;CMD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"bundle exec unicorn_rails -E &lt;/span&gt;&lt;span class="nv"&gt;$ENV&lt;/span&gt;&lt;span class="s2"&gt; -D -c &lt;/span&gt;&lt;span class="nv"&gt;$APP_ROOT&lt;/span&gt;&lt;span class="s2"&gt;/config/unicorn.rb"&lt;/span&gt;
&lt;span class="nv"&gt;action&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nt"&gt;-u&lt;/span&gt;

&lt;span class="nv"&gt;old_pid&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$PID&lt;/span&gt;&lt;span class="s2"&gt;.oldbin"&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; &lt;span class="nv"&gt;$APP_ROOT&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nb"&gt;exit &lt;/span&gt;1

sig &lt;span class="o"&gt;(){&lt;/span&gt;
        &lt;span class="nb"&gt;test&lt;/span&gt; &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$PID&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;kill&lt;/span&gt; -&lt;span class="nv"&gt;$1&lt;/span&gt; &lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; &lt;span class="nv"&gt;$PID&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

oldsig &lt;span class="o"&gt;(){&lt;/span&gt;
        &lt;span class="nb"&gt;test&lt;/span&gt; &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nv"&gt;$old_pid&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;kill&lt;/span&gt; -&lt;span class="nv"&gt;$1&lt;/span&gt; &lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; &lt;span class="nv"&gt;$old_pid&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="nv"&gt;$action&lt;/span&gt; &lt;span class="k"&gt;in
&lt;/span&gt;start&lt;span class="p"&gt;)&lt;/span&gt;
        sig 0 &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&amp;amp;2 &lt;span class="s2"&gt;"Already running"&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;exit &lt;/span&gt;0
        su &lt;span class="nv"&gt;$APP_USER&lt;/span&gt; &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$CMD&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;;;&lt;/span&gt;
stop&lt;span class="p"&gt;)&lt;/span&gt;
        sig QUIT &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;exit &lt;/span&gt;0
        &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&amp;amp;2 &lt;span class="s2"&gt;"Not running"&lt;/span&gt;
        &lt;span class="p"&gt;;;&lt;/span&gt;
force-stop&lt;span class="p"&gt;)&lt;/span&gt;
        sig TERM &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;exit &lt;/span&gt;0

        &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&amp;amp;2 &lt;span class="s2"&gt;"Not running"&lt;/span&gt;
        &lt;span class="p"&gt;;;&lt;/span&gt;
restart|reload&lt;span class="p"&gt;)&lt;/span&gt;
        sig HUP &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;echo &lt;/span&gt;reloaded OK &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;exit &lt;/span&gt;0
        &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&amp;amp;2 &lt;span class="s2"&gt;"Couldn't reload, starting '&lt;/span&gt;&lt;span class="nv"&gt;$CMD&lt;/span&gt;&lt;span class="s2"&gt;' instead"&lt;/span&gt;
        su &lt;span class="nv"&gt;$APP_USER&lt;/span&gt; &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$CMD&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;;;&lt;/span&gt;
upgrade&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;if &lt;/span&gt;sig USR2 &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; sleep2 &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; sig 0 &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; oldsig QUIT
        &lt;span class="k"&gt;then
                &lt;/span&gt;&lt;span class="nv"&gt;n&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$TIMEOUT&lt;/span&gt;
                &lt;span class="k"&gt;while &lt;/span&gt;&lt;span class="nb"&gt;test&lt;/span&gt; &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nv"&gt;$old_pid&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;test&lt;/span&gt; &lt;span class="nv"&gt;$n&lt;/span&gt; &lt;span class="nt"&gt;-ge&lt;/span&gt; 0
                &lt;span class="k"&gt;do
                        &lt;/span&gt;&lt;span class="nb"&gt;printf&lt;/span&gt; &lt;span class="s1"&gt;'.'&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sleep &lt;/span&gt;1 &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nv"&gt;n&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$((&lt;/span&gt;&lt;span class="nv"&gt;$n&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="k"&gt;))&lt;/span&gt;
                &lt;span class="k"&gt;done
                &lt;/span&gt;&lt;span class="nb"&gt;echo

                &lt;/span&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="nb"&gt;test&lt;/span&gt; &lt;span class="nv"&gt;$n&lt;/span&gt; &lt;span class="nt"&gt;-lt&lt;/span&gt; 0 &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;test&lt;/span&gt; &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nv"&gt;$old_pid&lt;/span&gt;
                &lt;span class="k"&gt;then
                        &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&amp;amp;2 &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$old_pid&lt;/span&gt;&lt;span class="s2"&gt; still exists after &lt;/span&gt;&lt;span class="nv"&gt;$TIMEOUT&lt;/span&gt;&lt;span class="s2"&gt; seconds"&lt;/span&gt;
                        exit1
                &lt;span class="k"&gt;fi
                &lt;/span&gt;exit0
        &lt;span class="k"&gt;fi
        &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&amp;amp;2 &lt;span class="s2"&gt;"Couldn't upgrade, starting '&lt;/span&gt;&lt;span class="nv"&gt;$CMD&lt;/span&gt;&lt;span class="s2"&gt;' instead"&lt;/span&gt;
        su &lt;span class="nv"&gt;$APP_USER&lt;/span&gt; &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$CMD&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;;;&lt;/span&gt;
reopen-logs&lt;span class="p"&gt;)&lt;/span&gt;
        sig USR1
        &lt;span class="p"&gt;;;&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&amp;amp;2 &lt;span class="s2"&gt;"Usage: &lt;/span&gt;&lt;span class="nv"&gt;$0&lt;/span&gt;&lt;span class="s2"&gt; &amp;lt;start|stop|restart|upgrade|force-stop|reopen-logs&amp;gt;"&lt;/span&gt;
        &lt;span class="nb"&gt;exit &lt;/span&gt;1
        &lt;span class="p"&gt;;;&lt;/span&gt;
&lt;span class="k"&gt;esac&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;参考：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="http://unicorn.bogomips.org/" rel="nofollow" target="_blank"&gt;http://unicorn.bogomips.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.kiskolabs.com/post/722322392/unicorn-init-scripts" rel="nofollow" target="_blank"&gt;http://blog.kiskolabs.com/post/722322392/unicorn-init-scripts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://codetunes.com/2012/06/20/nginxunicorn-configuration-for-multi-app-servers" rel="nofollow" target="_blank"&gt;http://codetunes.com/2012/06/20/nginxunicorn-configuration-for-multi-app-servers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://sirupsen.com/setting-up-unicorn-with-nginx/" rel="nofollow" target="_blank"&gt;http://sirupsen.com/setting-up-unicorn-with-nginx/&lt;/a&gt; &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;说明：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;请把 project_name 改成自己项目的名称&lt;/li&gt;
&lt;li&gt;简单的先放着，因为有其他任务，后续再调格式&lt;/li&gt;
&lt;li&gt;因为是自己研究的，有不对的地方，请大家指教，后续也会继续更新的。&lt;/li&gt;
&lt;/ol&gt;</description>
      <author>luoping0425</author>
      <pubDate>Thu, 02 Aug 2012 21:27:03 +0800</pubDate>
      <link>https://ruby-china.org/topics/4709</link>
      <guid>https://ruby-china.org/topics/4709</guid>
    </item>
    <item>
      <title>关于 unicorn 配置</title>
      <description>&lt;p&gt;在 &lt;a href="https://github.com/ruby-china/ruby-china/blob/master/config/unicorn.rb" rel="nofollow" target="_blank"&gt;https://github.com/ruby-china/ruby-china/blob/master/config/unicorn.rb&lt;/a&gt; 上看到有这样一行：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rails_env = ENV["RAILS_ENV"] || "production"
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;看起来是和设置项目运行模式：production 和 development，
我自己这边试下来没起作用，还是需要通过 unicorn_rails 命令时添加 -E 参数，
求个说明，还是我这边有其他配置问题导致没作用？&lt;/p&gt;</description>
      <author>luoping0425</author>
      <pubDate>Thu, 02 Aug 2012 15:45:45 +0800</pubDate>
      <link>https://ruby-china.org/topics/4704</link>
      <guid>https://ruby-china.org/topics/4704</guid>
    </item>
    <item>
      <title>[上海] 想和码婆一起工作吗？</title>
      <description>&lt;pre class="highlight plaintext"&gt;&lt;code&gt;如果遇到个会写代码的妹纸就赶紧娶了吧。
1、长年专业的训练让她们能够理性思考，相信没有事件触发，暴怒的代码是不会运行的；
2、她总是在思考自己在哪里出错了。遇事先从自己找原因；
3、她坚信，世界是由懒人推进的，正因为有偷懒的想法，人类的科技才会发展。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;（via &lt;a href="http://weibo.com/1671242737/yhF3NBHgk" rel="nofollow" target="_blank" title=""&gt;@ 管轶栋&lt;/a&gt;）&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;你见过在fix bug跑通test case后会摆动左右两只剪刀手喊yeah的萝莉码婆吗？
This is it。。。。
你想吃码婆豆腐吗？
Join eDoctor。。。。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;（via &lt;a href="http://weibo.com/1655747731/yhKFgspAc" rel="nofollow" target="_blank" title=""&gt;@ 有个梨 UGlee&lt;/a&gt;）&lt;/p&gt;

&lt;p&gt;二话不说，先上视频和图！&lt;/p&gt;

&lt;p&gt;&lt;span class="embed-responsive embed-responsive-16by9"&gt;&lt;iframe class="embed-responsive-item" src="//player.youku.com/embed/XMzcyNzE5NjQ4" allowfullscreen=""&gt;&lt;/iframe&gt;&lt;/span&gt;
&lt;img src="http://ww1.sinaimg.cn/bmiddle/639d23f1gw1dtmd5x92wkj.jpg" title="" alt="我们的码婆哦"&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="http://ww2.sinaimg.cn/bmiddle/639d23f1gw1dtgjc2whu1j.jpg" title="" alt="我们的码婆 &amp;amp;技术总监"&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="http://ww1.sinaimg.cn/bmiddle/639d23f1gw1dtmdne4m21j.jpg" title="" alt="我们的设计妹纸哦"&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="http://ww1.sinaimg.cn/bmiddle/639d23f1gw1dtk8ujkj99j.jpg" title="" alt="我们的设计妹纸哦"&gt;&lt;/p&gt;

&lt;p&gt;正题来也
职位名称：Ruby 实习生
岗位职责：
1.计算机/软件工程相关专业
2.热爱编程，拥抱变化，对新技术保持好奇心
3.熟悉 Linux 下基本操作，熟悉数据库基本操作
4.成为团队中可信赖的一员&lt;/p&gt;

&lt;p&gt;满足以下要求会优先考虑
1.有 github 账号 并有活跃项目
2.对 ruby/python 等动态语言有了解&lt;/p&gt;

&lt;p&gt;标配：15 寸 MBP，8G 内存，750G 混合硬盘，24 寸显示器&lt;/p&gt;

&lt;p&gt;我们的福利：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;社保假期&lt;/li&gt;
&lt;li&gt;免费体检&lt;/li&gt;
&lt;li&gt;年度旅游&lt;/li&gt;
&lt;li&gt;免费午餐＋下午茶&lt;/li&gt;
&lt;li&gt; 技术总监开的摄影课程&lt;/li&gt;
&lt;li&gt;电影研修会（我们可是有专业的电影鉴定大师和审片人员的哦！）&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;公司地址：长宁区天山路 310 号海益商务大厦 11-12 层 (地铁 2 号线威宁路 4 号出口)&lt;/p&gt;

&lt;p&gt;这里有高富帅，这里有白富美，当然我们还有坐镇江湖的大叔等你来推倒！抓紧机会哦！&lt;/p&gt;

&lt;p&gt;有兴趣的同学请发简历或技术博客地址到邮箱：&lt;a href="mailto:ping.luo@edoctor.cn" title=""&gt;ping.luo@edoctor.cn&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;我们也招前端同学，有意向的可以看：&lt;a href="http://mrzhang.me/blog/find-kaopu-f2e-developers.html" rel="nofollow" target="_blank" title=""&gt;http://mrzhang.me/blog/find-kaopu-f2e-developers.html&lt;/a&gt;  &lt;/p&gt;</description>
      <author>luoping0425</author>
      <pubDate>Fri, 29 Jun 2012 23:35:55 +0800</pubDate>
      <link>https://ruby-china.org/topics/4052</link>
      <guid>https://ruby-china.org/topics/4052</guid>
    </item>
    <item>
      <title>rails tricks: pluck (ActiveRecord)</title>
      <description>&lt;p&gt;参考：&lt;a href="http://guides.rubyonrails.org/active_record_querying.html#pluck" rel="nofollow" target="_blank"&gt;http://guides.rubyonrails.org/active_record_querying.html#pluck&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;pluck can be used to query a single column from the underlying table of a model. It accepts a column name as argument and returns an array of values of the specified column with the corresponding data type.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;pluck 能用来查询来自于一个 model 的基础表的单列，它接受一个列名作为参数，返回特定列的对应值的一个数组。&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="no"&gt;Client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;where&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:active&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;pluck&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="c1"&gt;# select id from clients where active = 1&lt;/span&gt;

&lt;span class="no"&gt;Client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;uniq&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pluck&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:role&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="c1"&gt;# select distinct role from clients  &lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;

&lt;blockquote&gt;
&lt;p&gt;pluck makes it posspible code like&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;pluck 类似于下面的代码：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="no"&gt;Client&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="ss"&gt;:id&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;c&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;c&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;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;with&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;即：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="no"&gt;Client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pluck&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;说明：最近在整理项目，发现很多冗余的代码，顺手整理一下，以上这段是从 rails guides 中翻译的，本来想放到 rails guides，但目前自己占了个翻译的坑还没完成就没好意思，先贴这。
关于 tricks，我是想把一些大家平常不太注意的比较少用的一些技巧（或不算技巧）。当然也是比较简单的一些东西。  &lt;/p&gt;</description>
      <author>luoping0425</author>
      <pubDate>Thu, 21 Jun 2012 13:18:45 +0800</pubDate>
      <link>https://ruby-china.org/topics/3922</link>
      <guid>https://ruby-china.org/topics/3922</guid>
    </item>
    <item>
      <title>Tricks: Array.take</title>
      <description>&lt;p&gt;Array.take&lt;/p&gt;

&lt;h2&gt;take(n) → new_ary&lt;/h2&gt;

&lt;p&gt;Returns first n elements from ary.&lt;/p&gt;

&lt;p&gt;
a = [1, 2, 3, 4, 5, 0]
a.take(3)             #=&amp;gt; [1, 2, 3]
&lt;/p&gt;

&lt;p&gt;Array 的 take 方法，用来获取前 n 个元素。  &lt;/p&gt;</description>
      <author>luoping0425</author>
      <pubDate>Thu, 21 Jun 2012 11:43:17 +0800</pubDate>
      <link>https://ruby-china.org/topics/3921</link>
      <guid>https://ruby-china.org/topics/3921</guid>
    </item>
    <item>
      <title>求问：rdoc 生成的文档如何换行</title>
      <description>&lt;p&gt;不知道有哪位使用过 rdoc 的，现在使用 rdoc 生成文档，发现原本有换行的注释，生成的文档却完全没换行，看 help 说之前有--inline-source 选项，默认内容为 inline，不知道怎么样能明确换行，是在生成时加选项，还是在注释内部添加 Markdown？求指教  &lt;/p&gt;</description>
      <author>luoping0425</author>
      <pubDate>Fri, 01 Jun 2012 11:38:49 +0800</pubDate>
      <link>https://ruby-china.org/topics/3596</link>
      <guid>https://ruby-china.org/topics/3596</guid>
    </item>
  </channel>
</rss>
