<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>phpnew (rubypad)</title>
    <link>https://ruby-china.org/phpnew</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>apt-get upgrade 出现缺 cPickle，debconf 错误</title>
      <description>&lt;p&gt;cat /etc/issue
Debian GNU/Linux 6.0 \n \l&lt;/p&gt;

&lt;p&gt;apt-get update
正常&lt;/p&gt;

&lt;p&gt;apt-get upgrade 出现问题
```bash  File "/usr/bin/pycompile", line 38, in 
    from debpython.pydist import PUBLIC_DIR_RE
  File "/usr/share/python/debpython/pydist.py", line 29, in 
    from debpython.tools import memoize
  File "/usr/share/python/debpython/tools.py", line 25, in 
    from cPickle import dumps
ImportError: No module named 'cPickle'
dpkg: error processing debconf (--configure):
 subprocess installed post-installation script returned error exit status 1
configured to not write apport reports
                                      Errors were encountered while processing:
 debconf
E: Sub-process /usr/bin/dpkg returned an error code (1)&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
python -v发现默认是3版本的
python下载2.7.5源码编译
然后 python -v 
```bash
Python 2.7.5 (default, Jul 26 2013, 04:26:24) 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;但是问题依然同上&lt;/p&gt;

&lt;p&gt;apt-get -f install
同上上&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt; /usr/bin/python
lrwxrwxrwx 1 root root 30 Apr 29 14:01 /usr/bin/python -&amp;gt; /usr/local/python3/bin/python3
&lt;/code&gt;&lt;/pre&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;dpkg &lt;span class="nt"&gt;-l&lt;/span&gt; | &lt;span class="nb"&gt;grep &lt;/span&gt;python
rc  python                              2.6.6-3+squeeze7             interactive high-level object-oriented language &lt;span class="o"&gt;(&lt;/span&gt;default version&lt;span class="o"&gt;)&lt;/span&gt;
ii  python-apt                          0.7.100.1+squeeze1           Python interface to libapt-pkg
ii  python-apt-common                   0.7.100.1+squeeze1           Python interface to libapt-pkg &lt;span class="o"&gt;(&lt;/span&gt;locales&lt;span class="o"&gt;)&lt;/span&gt;
ii  python-central                      0.6.16+nmu1                  register and build utility &lt;span class="k"&gt;for &lt;/span&gt;Python packages
ii  python-minimal                      2.6.6-3+squeeze7             minimal subset of the Python language &lt;span class="o"&gt;(&lt;/span&gt;default version&lt;span class="o"&gt;)&lt;/span&gt;
ii  python-reportbug                    4.12.6                       Python modules &lt;span class="k"&gt;for &lt;/span&gt;interacting with bug tracking systems
ii  python-support                      1.0.10                       automated rebuilding support &lt;span class="k"&gt;for &lt;/span&gt;Python modules
ii  python2.6                           2.6.6-8+b1                   An interactive high-level object-oriented language &lt;span class="o"&gt;(&lt;/span&gt;version 2.6&lt;span class="o"&gt;)&lt;/span&gt;
ii  python2.6-minimal                   2.6.6-8+b1                   A minimal subset of the Python language &lt;span class="o"&gt;(&lt;/span&gt;version 2.6&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;google 半天，没能解决，特来请教
该什么办&lt;/p&gt;</description>
      <author>phpnew</author>
      <pubDate>Fri, 26 Jul 2013 05:19:42 +0800</pubDate>
      <link>https://ruby-china.org/topics/12788</link>
      <guid>https://ruby-china.org/topics/12788</guid>
    </item>
    <item>
      <title>Ubuntu Server + nginx + unicorn tcp socket 方式如何设置运行多个 app</title>
      <description>&lt;p&gt;疑问一
&lt;strong&gt;tcp socket 和 unix socket 差别 的问题&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;我抄配置用 unix socket 失败
&lt;strong&gt;改用 tcp socket 却成功，不知道原因是什么&lt;/strong&gt;
虽然这样搞定一个 app，但是第二个 app 就没招了&lt;/p&gt;

&lt;p&gt;vim /home/rails/hellworld/config/unicorn.rb&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;module&lt;/span&gt; &lt;span class="nn"&gt;Rails&lt;/span&gt;
  &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="nb"&gt;self&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;root&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="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="nb"&gt;puts&lt;/span&gt; &lt;span class="no"&gt;Rails&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;root&lt;/span&gt;
&lt;span class="n"&gt;rails_env&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;ENV&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"RAILS_ENV"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="s2"&gt;"production"&lt;/span&gt;

&lt;span class="n"&gt;preload_app&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt;
&lt;span class="n"&gt;working_directory&lt;/span&gt; &lt;span class="no"&gt;Rails&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;root&lt;/span&gt;
&lt;span class="n"&gt;pid&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="no"&gt;Rails&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;root&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/tmp/pids/unicorn.pid"&lt;/span&gt;
&lt;span class="n"&gt;stderr_path&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="no"&gt;Rails&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;root&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/log/unicorn.log"&lt;/span&gt;
&lt;span class="n"&gt;stdout_path&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="no"&gt;Rails&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;root&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/log/unicorn.log"&lt;/span&gt;

&lt;span class="n"&gt;listen&lt;/span&gt; &lt;span class="mi"&gt;5000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:tcp_nopush&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="kp"&gt;false&lt;/span&gt;   &lt;span class="c1"&gt;# &lt;/span&gt;

&lt;span class="n"&gt;listen&lt;/span&gt; &lt;span class="s2"&gt;"/tmp/unicorn.ruby-china.sock"&lt;/span&gt;
&lt;span class="n"&gt;worker_processes&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;
&lt;span class="n"&gt;timeout&lt;/span&gt; &lt;span class="mi"&gt;120&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="no"&gt;GC&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;respond_to?&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:copy_on_write_friendly&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="no"&gt;GC&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;copy_on_write_friendly&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="n"&gt;before_exec&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;server&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
  &lt;span class="no"&gt;ENV&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"BUNDLE_GEMFILE"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="no"&gt;Rails&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;root&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/Gemfile"&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="n"&gt;before_fork&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;server&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;worker&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
  &lt;span class="n"&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="si"&gt;#{&lt;/span&gt;&lt;span class="no"&gt;Rails&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;root&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/tmp/pids/unicorn.pid.oldbin"&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;exists?&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;old_pid&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pid&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="n"&gt;old_pid&lt;/span&gt;
    &lt;span class="k"&gt;begin&lt;/span&gt;
      &lt;span class="no"&gt;Process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;kill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"QUIT"&lt;/span&gt;&lt;span class="p"&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;read&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;old_pid&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;to_i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;rescue&lt;/span&gt; &lt;span class="no"&gt;Errno&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;ENOENT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;Errno&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;ESRCH&lt;/span&gt;
      &lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="s2"&gt;"Send 'QUIT' signal to unicorn error!"&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;/code&gt;&lt;/pre&gt;
&lt;p&gt;listen 5000, :tcp_nopush =&amp;gt; false   #
这个 listen 5000 是咋回事，我看不少 listen 3000，随意指定一个不冲突端口都可以吧
我测试 5001 5002 都可以&lt;/p&gt;

&lt;p&gt;我 tmp 下创建了 listen "/tmp/unicorn.ruby-china.sock" 
chown www:wwww
也 chmod 777 了
nginx 也&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;upstream&lt;/span&gt; &lt;span class="n"&gt;unicorn_server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
       &lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="n"&gt;unix&lt;/span&gt;&lt;span class="ss"&gt;:/&lt;/span&gt;&lt;span class="n"&gt;tmp&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;unicorn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ruby&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;china&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sock&lt;/span&gt; &lt;span class="n"&gt;fail_timeout&lt;/span&gt;&lt;span class="o"&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;/code&gt;&lt;/pre&gt;&lt;pre class="highlight ruby"&gt;&lt;code&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;rvm&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;gems&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;ruby&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1.9&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;p374&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;gems&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;unicorn&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;4.6&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;lib&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;unicorn&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;socket_helper&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;134&lt;/span&gt;&lt;span class="ss"&gt;:in&lt;/span&gt; &lt;span class="sb"&gt;`bind_listen': socket=/tmp/ruby-china.sock specified but it is not a socket! (ArgumentError)
```&lt;/span&gt;&lt;span class="n"&gt;ruby&lt;/span&gt;

&lt;span class="n"&gt;后来我想起了tcp&lt;/span&gt; &lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="err"&gt;，&lt;/span&gt; 
&lt;span class="sb"&gt;```ruby
listen "/tmp/unicorn.ruby-china.sock" 替换为 listen '127.0.0.1:8080'
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;nginx.conf  更改 upstream&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;upstream&lt;/span&gt; &lt;span class="n"&gt;unicorn_app1&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
       &lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="mf"&gt;127.0&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;0.1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;8080&lt;/span&gt; &lt;span class="n"&gt;fail_timeout&lt;/span&gt;&lt;span class="o"&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;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后
RAILS_ENV=production bundle exec unicorn_rails -c config/unicorn.rb -E production -D
第一 app 正常了
问题是 我不知道为咋 unix socket 不行，tcp socket 却可以，发生了什么问题？？？
是我 nginx 编译问题，还是我配置出问题？&lt;/p&gt;

&lt;p&gt;问题 2
用 tcp socket 如何跑多个运用
直接复制 app1 的会变成访问两个域名，都跑到第一个运行的 app 上&lt;/p&gt;

&lt;p&gt;我尝试修改第二 app2 unicorn.rb&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;listen&lt;/span&gt; &lt;span class="mi"&gt;5077&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:tcp_nopush&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="kp"&gt;false&lt;/span&gt; &lt;span class="c1"&gt;#用不同端口，这个端口好像随便不冲突的都可以&lt;/span&gt;
&lt;span class="n"&gt;listen&lt;/span&gt; &lt;span class="s1"&gt;'127.0.0.1:3000'&lt;/span&gt;  &lt;span class="c1"&gt;#换一个3000的&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;nginx.conf app2&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;upstream&lt;/span&gt; &lt;span class="n"&gt;unicorn_app2&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
       &lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="mf"&gt;127.0&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;0.1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;3000&lt;/span&gt; &lt;span class="n"&gt;fail_timeout&lt;/span&gt;&lt;span class="o"&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;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后
RAILS_ENV=production bundle exec unicorn_rails -c config/unicorn.rb -E production -D&lt;/p&gt;

&lt;p&gt;现在是第二个 app 正常访问，&lt;strong&gt;但是内容跑到第一个上面去&lt;/strong&gt;
同时第一个 app 不正常了
&lt;strong&gt;“We're sorry, but something went wrong.”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;问题就是 用 tcp socket 方式如何设置跑多个运用
一台服务器上，127.0.0.1 的除了换端口不知道用什么办法
求助&lt;/p&gt;</description>
      <author>phpnew</author>
      <pubDate>Sat, 11 May 2013 00:44:58 +0800</pubDate>
      <link>https://ruby-china.org/topics/10895</link>
      <guid>https://ruby-china.org/topics/10895</guid>
    </item>
    <item>
      <title>Ubuntu Server + nginx + unicorn 遇到问题</title>
      <description>&lt;p&gt;&lt;strong&gt;网页一直是 502 Bad Gateway&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ubuntu 12.04
ruby 1.9.3p392 (2013-02-22 revision 39386) [x86_64-linux]
Rails 3.2.13
以上参考 wiki 部署
&lt;a href="http://ruby-china.org/wiki/install_ruby_guide" rel="nofollow" target="_blank"&gt;http://ruby-china.org/wiki/install_ruby_guide&lt;/a&gt;
之前一直用 centos 部署 php，最近刚刚开始尝试使用 ubuntu&lt;/p&gt;

&lt;p&gt;账号 rails
/home/rails/hellworld
rails new helloworld，建立项目，scaffold home, rake db:migrate 
rails s，利用 WEBrick，ip:3000 访问正常&lt;/p&gt;

&lt;p&gt;==========上面很简单，到 unicorn 和 nginx 就难死了，接下来一大堆坑了==========
Nginx
apt-get install nginx&lt;/p&gt;

&lt;p&gt;Unicorn
gem install unicorn&lt;/p&gt;

&lt;p&gt;搞了两天没搞定，就直接 copy ruby-china 的 unicron.rb，稍微改动一点点&lt;/p&gt;

&lt;p&gt;vim /home/rails/hellworld/config/unicorn.rb &lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;module&lt;/span&gt; &lt;span class="nn"&gt;Rails&lt;/span&gt;
  &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="nb"&gt;self&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;root&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="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="nb"&gt;puts&lt;/span&gt; &lt;span class="no"&gt;Rails&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;root&lt;/span&gt;
&lt;span class="n"&gt;rails_env&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;ENV&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"RAILS_ENV"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="s2"&gt;"production"&lt;/span&gt;

&lt;span class="n"&gt;preload_app&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt;
&lt;span class="n"&gt;working_directory&lt;/span&gt; &lt;span class="no"&gt;Rails&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;root&lt;/span&gt;
&lt;span class="n"&gt;pid&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="no"&gt;Rails&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;root&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/tmp/pids/unicorn.pid"&lt;/span&gt;
&lt;span class="n"&gt;stderr_path&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="no"&gt;Rails&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;root&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/log/unicorn.log"&lt;/span&gt;
&lt;span class="n"&gt;stdout_path&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="no"&gt;Rails&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;root&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/log/unicorn.log"&lt;/span&gt;

&lt;span class="n"&gt;listen&lt;/span&gt; &lt;span class="mi"&gt;5000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:tcp_nopush&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="kp"&gt;false&lt;/span&gt;

&lt;span class="n"&gt;listen&lt;/span&gt; &lt;span class="s2"&gt;"/tmp/unicorn.ruby-china.sock"&lt;/span&gt;
&lt;span class="n"&gt;worker_processes&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;
&lt;span class="n"&gt;timeout&lt;/span&gt; &lt;span class="mi"&gt;120&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="no"&gt;GC&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;respond_to?&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:copy_on_write_friendly&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="no"&gt;GC&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;copy_on_write_friendly&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="n"&gt;before_exec&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;server&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
  &lt;span class="no"&gt;ENV&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"BUNDLE_GEMFILE"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="no"&gt;Rails&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;root&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/Gemfile"&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="n"&gt;before_fork&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;server&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;worker&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
  &lt;span class="n"&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="si"&gt;#{&lt;/span&gt;&lt;span class="no"&gt;Rails&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;root&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/tmp/pids/unicorn.pid.oldbin"&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;exists?&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;old_pid&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pid&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="n"&gt;old_pid&lt;/span&gt;
    &lt;span class="k"&gt;begin&lt;/span&gt;
      &lt;span class="no"&gt;Process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;kill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"QUIT"&lt;/span&gt;&lt;span class="p"&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;read&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;old_pid&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;to_i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;rescue&lt;/span&gt; &lt;span class="no"&gt;Errno&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;ENOENT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;Errno&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;ESRCH&lt;/span&gt;
      &lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="s2"&gt;"Send 'QUIT' signal to unicorn error!"&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;/code&gt;&lt;/pre&gt;
&lt;p&gt;创建一下&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo touch /tmp/unicorn.ruby-china.sock
sudo chown rails /tmp/unicorn.ruby-china.sock

’‘’

编辑nginx.conf
sudo vim /etc/nginx/nginx.conf
```BashLexer
user rails;
worker_processes 1;
pid /var/run/nginx.pid;

events {
  worker_connections  1024;
  accept_mutex off;
}

http {
          include mime.types;
  default_type application/octet-stream;
  access_log /var/log/nginx/nginx.access.log combined;

  sendfile on;
  tcp_nopush on;
  tcp_nodelay off;

  gzip on;
  gzip_http_version 1.0;
  gzip_proxied any;
  gzip_min_length 500;
  gzip_disable "MSIE [1-6]\.";
  gzip_types text/plain  text/css
             text/comma-separated-values
             text/javascript application/x-javascript
             application/atom+xml;




     upstream unicorn_server {
       server unix:/tmp/unicorn.ruby-china.sock fail_timeout=0;
    }

    server {
        listen       80;
        server_name  www.ruby1.com ruby1.com;
        client_max_body_size 4G;
        root /home/rails/hellworld/public;

        #access_log  logs/host.access.log  main;

        location / {
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_buffering on;
        proxy_pass http://unicorn_server;
        }

    }
}

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;域名 rub1.com 只是测试的，vim /etc/hosts 都改回指向 127.0.0.1&lt;/p&gt;

&lt;p&gt;浏览器测试
&lt;strong&gt;网页一直是 502 Bad Gateway&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;tail -f /var/log/nginx/error.log 
跟踪 nginx error.log&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rver: www.ruby1.com, request: "GET /favicon.ico HTTP/1.1", upstream: "http://unix:/tmp/unicorn.ruby-china.sock:/favicon.ico", host: "www.ruby1.com"
2013/04/19 06:10:36 [error] 1152#0: *42 connect() to unix:/tmp/unicorn.ruby-china.sock failed (111: Connection refused) while connecting to upstream, client: 10.0.1.88, server: www.ruby1.com, request: "GET /favicon.ico HTTP/1.1", upstream: "http://unix:/tmp/unicorn.ruby-china.sock:/favicon.ico", host: "www.ruby1.com"
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;111: Connection refused&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;搞了好久都没法搞定
求高手指点&lt;/p&gt;</description>
      <author>phpnew</author>
      <pubDate>Fri, 19 Apr 2013 21:12:20 +0800</pubDate>
      <link>https://ruby-china.org/topics/10349</link>
      <guid>https://ruby-china.org/topics/10349</guid>
    </item>
  </channel>
</rss>
