<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>xufeisofly (Nor)</title>
    <link>https://ruby-china.org/xufeisofly</link>
    <description/>
    <language>en-us</language>
    <item>
      <title>如何在 Ubuntu 云服务器上部署自己的 Rails 应用</title>
      <description>&lt;h2 id="前言"&gt;前言&lt;/h2&gt;
&lt;p&gt;自学 rails 一段时间了，之前只用 heroku 部署了网站，想尝试把网站以一个更“正经”的方式呈现出来，就买了一个阿里云服务器。参考了网上部分 rails 部署教程，过程中也遇到了一些问题，所以在完成之后总结了一下，撰写此文，方便其他像我一样的初学者日后能够快速的将一个 rails 网站部署到云服务器上，不求原理，只讲操作，力求简单易懂。&lt;/p&gt;

&lt;p&gt;&lt;em&gt;注：本文大量参考了 ruby china 中的另一篇文章：&lt;a href="https://ruby-china.org/topics/17553" title=""&gt;《在 Aliyun 上快速部署 Ruby on Rails》&lt;/a&gt;，并根据自己遇到的一些问题做了细微补充&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="我的本地环境"&gt;我的本地环境&lt;/h2&gt;&lt;h6 id="操作系统：Ubuntu 16.04 32位"&gt;操作系统：Ubuntu 16.04 32 位&lt;/h6&gt;&lt;h6 id="Ruby: 2.3.0"&gt;Ruby: 2.3.0&lt;/h6&gt;&lt;h6 id="Rails: 4.2.6"&gt;Rails: 4.2.6&lt;/h6&gt;&lt;h2 id="Step1: 买个云服务器"&gt;Step1: 买个云服务器&lt;/h2&gt;
&lt;p&gt;在此以阿里云服务器为例，我买的是最低配置，Ubuntu 16.04 操作系统，成功后会给你一个公网 IP，使用 ssh 连接到这个 IP 就可以配置这台 server ubuntu 了，阿里云控制台上可配置云服务器的密码。现在假设我买到的云服务器信息如下：&lt;/p&gt;
&lt;h6 id="操作系统：Ubuntu 16.04 32位"&gt;操作系统：Ubuntu 16.04 32 位&lt;/h6&gt;&lt;h6 id="公网IP：190.74.8.177"&gt;公网 IP：190.74.8.177&lt;/h6&gt;&lt;h6 id="登录密码：******"&gt;登录密码：******&lt;/h6&gt;&lt;h6 id="数据库：MySQL"&gt;数据库：MySQL&lt;/h6&gt;
&lt;p&gt;&lt;em&gt;注：第一次买成了虚拟主机，然后发现虚拟主机是不能通过 ssh 配置的，不能安装 rails 环境…还好可以退款…&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="Step2: 连接云服务器"&gt;Step2: 连接云服务器&lt;/h2&gt;
&lt;p&gt;现在相当于买了台电脑回来，这个电脑没有实体，但我在任何地方都可以远程登录。
登录并输入密码：&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;ssh root@190.74.8.177
root@190.74.8.177&lt;span class="s1"&gt;'s password: ******
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后就会进入服务器账户，但永远以 root 用户进入不安全，所以登录后我们在 server 端新建一个用户：&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;~# adduser sofly
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后我们 ctrl+D 退出 server，在本地重新以 sofly 的用户登录：&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;ssh sofly@190.74.8.177
sofly@190.74.8.177&lt;span class="s1"&gt;'s password: ******
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;注：这里可以通过配置 ssh-keygen 来省去输入密码的过程，此处不介绍，可参考其他文章&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="Step3: 在云服务器上安装Ruby"&gt;Step3: 在云服务器上安装 Ruby&lt;/h2&gt;
&lt;p&gt;以下基本参考&lt;a href="https://ruby-china.org/topics/17553" title=""&gt;《在 Aliyun 上快速部署 Ruby on Rails》&lt;/a&gt;，不予详述。首先安装 RVM：&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="se"&gt;\c&lt;/span&gt;url &lt;span class="nt"&gt;-L&lt;/span&gt; https://get.rvm.io | bash &lt;span class="nt"&gt;-s&lt;/span&gt; stable
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'[[ -s "$HOME/.rvm/scripts/rvm" ]] &amp;amp;&amp;amp; . "$HOME/.rvm/scripts/rvm"'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;~/.bashrc
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;source&lt;/span&gt; ~/.bashrc
&lt;span class="nv"&gt;$ &lt;/span&gt;rvm &lt;span class="nt"&gt;-v&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;把 RVM 源替换为 taobao 源：&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sed&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s1"&gt;'s/ftp\.ruby-lang\.org\/pub\/ruby/ruby\.taobao\.org\/mirrors\/ruby/g'&lt;/span&gt; ~/.rvm/config/db
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;安装 RVM 依赖等&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;rvm requirements
&lt;span class="nv"&gt;$ &lt;/span&gt;rvm pkg &lt;span class="nb"&gt;install &lt;/span&gt;readline
&lt;span class="nv"&gt;$ &lt;/span&gt;rvm pkg &lt;span class="nb"&gt;install &lt;/span&gt;openssl
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;安装 Ruby，版本和我本地 ruby 一样&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;rvm &lt;span class="nb"&gt;install &lt;/span&gt;2.3.0
&lt;span class="nv"&gt;$ &lt;/span&gt;rvm use 2.3.0 &lt;span class="nt"&gt;--default&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;安装完毕后把 Rubygems 的源修改成阿里云的源&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;gem &lt;span class="nb"&gt;source&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; https://rubygems.org/
&lt;span class="nv"&gt;$ &lt;/span&gt;gem &lt;span class="nb"&gt;source&lt;/span&gt; &lt;span class="nt"&gt;-a&lt;/span&gt; http://mirrors.aliyun.com/rubygems/
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="Step4:在云服务器上安装Rails及数据库"&gt;Step4:在云服务器上安装 Rails 及数据库&lt;/h2&gt;
&lt;p&gt;继续抄袭该文。
安装 Rails，版本和我本地 rails 一样&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;gem &lt;span class="nb"&gt;install &lt;/span&gt;rails &lt;span class="nt"&gt;-v&lt;/span&gt; 4.2.6
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;安装 MySQL&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install &lt;/span&gt;mysql-server
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;或 PostgreSQL&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install &lt;/span&gt;postgresql postgresql-client libpq-dev
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="Step5:上传本地Rails工程到云服务器"&gt;Step5:上传本地 Rails 工程到云服务器&lt;/h2&gt;
&lt;p&gt;因为之前我的 rails 工程都提交到 github 或者 bitbucket 上了（如何提交至 git 此处不再赘述，请查阅相关文章），所以直接通过 git 的方式把代码下载到 server 上即可&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;git clone https://XXXXXX/project.git &lt;span class="o"&gt;(&lt;/span&gt;在github或bitbucket上面就可以找到，直接复制&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这样代码就下载到服务器上了，然后安装 gem&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;project
&lt;span class="nv"&gt;$ &lt;/span&gt;bundle &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;创建生产环境数据库并执行迁移&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ RAILS_ENV&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;production rake db:create
&lt;span class="nv"&gt;$ RAILS_ENV&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;production rake db:migrate
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;否则最终网站页面会显示（之前 heroku 部署时也经常遇到）&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;We're sorry, but something went wrong&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;重新 compile assets，这样所有的图片，CSS，scripts 才会加载&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ RAILS_ENV&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;production rake assets:precompile
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="Step6: 安装Passenger for Nginx"&gt;Step6: 安装 Passenger for Nginx&lt;/h2&gt;
&lt;p&gt;Nginx 是 HTTP 服务器，运行 nginx 类似于本地开启 rails server，才能实现网站的访问，首先安装 passenger：&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;gem &lt;span class="nb"&gt;install &lt;/span&gt;passenger
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后通过 source 编译的方式安装 Nginx&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;rvmsudo passenger-install-nginx-module
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;一路回车即可，在这里选择 1 回车：&lt;/p&gt;
&lt;h6 id="Automatically download and install Nginx?Nginx doesn't support loadable modules such as some other web servers do, so in order to install Nginx with Passenger support, it must be recompiled.Do you want this installer to download, compile and install Nginx for you?"&gt;Automatically download and install Nginx?Nginx doesn't support loadable modules such as some other web servers do, so in order to install Nginx with Passenger support, it must be recompiled.Do you want this installer to download, compile and install Nginx for you?&lt;/h6&gt;&lt;h6 id="1. Yes: download, compile and install Nginx for me. (recommended) The easiest way to get started. A stock Nginx 1.4.4 with Passenger support, but with no other additional third party modules, will be installed for you to a directory of your choice."&gt;1. Yes: download, compile and install Nginx for me. (recommended) The easiest way to get started. A stock Nginx 1.4.4 with Passenger support, but with no other additional third party modules, will be installed for you to a directory of your choice.&lt;/h6&gt;&lt;h6 id="2. No: I want to customize my Nginx installation. (for advanced users) Choose this if you want to compile Nginx with more third party modules besides Passenger, or if you need to pass additional options to Nginx's 'configure' script. This installer will 1) ask you for the location of the Nginx source code, 2) run the 'configure' script according to your instructions, and 3) run 'make install'."&gt;2. No: I want to customize my Nginx installation. (for advanced users) Choose this if you want to compile Nginx with more third party modules besides Passenger, or if you need to pass additional options to Nginx's 'configure' script. This installer will 1) ask you for the location of the Nginx source code, 2) run the 'configure' script according to your instructions, and 3) run 'make install'.&lt;/h6&gt;&lt;h6 id="Whichever you choose, if you already have an existing Nginx configuration file, then it will be preserved.Enter your choice (1 or 2) or press Ctrl-C to abort:1[ENTER]"&gt;Whichever you choose, if you already have an existing Nginx configuration file, then it will be preserved.Enter your choice (1 or 2) or press Ctrl-C to abort:1[ENTER]&lt;/h6&gt;
&lt;p&gt;最后看到这句话即安装成功&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Nginx with Passenger support was successfully installed.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="Step7:说两句Nginx的坑点"&gt;Step7:说两句 Nginx 的坑点&lt;/h2&gt;
&lt;p&gt;很多教程上是通过 apt 的方式安装 nginx 的，而我们是通过 recompile Nginx from source 的方式安装的。前者的 nginx 目录是/usr/sbin/nginx，配置文件目录是/etc/nginx/nginx.conf，后者的 nginx 目录是/opt/nginx/sbin/nginx，配置文件目录是/opt/nginx/conf/nginx.conf，是不一样的，最好先确认一下这些文件的位置再进行后续操作。
另一个区别是 nginx 启动和停止方式不同，apt-get 安装的 nginx 可以通过初始化脚本/etc/init.d/nginx 或命令 service nginx restart 启动，但目前 source 安装方式是不能通过这两种方法启动的。
启动方式如下：&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo&lt;/span&gt; /opt/nginx/sbin/nginx
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;停止方式如下：&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;ps auxw | &lt;span class="nb"&gt;grep &lt;/span&gt;nginx
root     29743  0.0  0.0  10192   564 ?        Ss   13:39   0:00 nginx: master process /opt/nginx/sbin/nginx
sofly    29744  0.0  0.4  10428  4500 ?        S    13:39   0:00 nginx: worker process
sofly    30080  0.0  0.0   5108   792 pts/1    S+   13:42   0:00 &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;--color&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;auto nginx
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo kill &lt;/span&gt;29743
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;所以，如果想重启 nginx 就要先 kill 在启动。虽然有点麻烦，但亲测可用。&lt;/p&gt;
&lt;h6 id="此处参考：[https://www.phusionpassenger.com/library/install/nginx/install/oss/rubygems_rvm/]"&gt;此处参考：[&lt;a href="https://www.phusionpassenger.com/library/install/nginx/install/oss/rubygems_rvm/" rel="nofollow" target="_blank"&gt;https://www.phusionpassenger.com/library/install/nginx/install/oss/rubygems_rvm/&lt;/a&gt;]&lt;/h6&gt;
&lt;p&gt;启动 Nginx 后，在浏览器中输入你的公网 IP，即：190.74.8.177，看到&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Welcome to nginx page&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;说明 nginx server 已成功启动，但还没有连接 rails&lt;/p&gt;
&lt;h2 id="Step8:配置Nginx启动rails"&gt;Step8:配置 Nginx 启动 rails&lt;/h2&gt;
&lt;p&gt;编辑 nginx 配置文件&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;vim /opt/nginx/conf/nginx.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;我的配置文件是这样的，加注释的几处注意一下就行了&lt;/p&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;&lt;span class="n"&gt;user&lt;/span&gt;  &lt;span class="n"&gt;sofly&lt;/span&gt;; &lt;span class="c"&gt;#此处设置为部署时的用户名
&lt;/span&gt;&lt;span class="n"&gt;worker_processes&lt;/span&gt;  &lt;span class="m"&gt;1&lt;/span&gt;; &lt;span class="c"&gt;#此处为云服务器核数
&lt;/span&gt;&lt;span class="n"&gt;error_log&lt;/span&gt;  &lt;span class="n"&gt;logs&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;error_log&lt;/span&gt;  &lt;span class="n"&gt;logs&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;notice&lt;/span&gt;;
&lt;span class="n"&gt;error_log&lt;/span&gt;  &lt;span class="n"&gt;logs&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;info&lt;/span&gt;;
&lt;span class="n"&gt;pid&lt;/span&gt;        /&lt;span class="n"&gt;run&lt;/span&gt;/&lt;span class="n"&gt;nginx&lt;/span&gt;.&lt;span class="n"&gt;pid&lt;/span&gt;; &lt;span class="c"&gt;#此处为nginx.pid的目录，位置应该是在这里
&lt;/span&gt;&lt;span class="n"&gt;events&lt;/span&gt; {
    &lt;span class="n"&gt;worker_connections&lt;/span&gt;  &lt;span class="m"&gt;1024&lt;/span&gt;;
}
&lt;span class="n"&gt;http&lt;/span&gt; {
    &lt;span class="n"&gt;passenger_root&lt;/span&gt; /&lt;span class="n"&gt;home&lt;/span&gt;/&lt;span class="n"&gt;sofly&lt;/span&gt;/.&lt;span class="n"&gt;rvm&lt;/span&gt;/&lt;span class="n"&gt;gems&lt;/span&gt;/&lt;span class="n"&gt;ruby&lt;/span&gt;-&lt;span class="m"&gt;2&lt;/span&gt;.&lt;span class="m"&gt;3&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;/&lt;span class="n"&gt;gems&lt;/span&gt;/&lt;span class="n"&gt;passenger&lt;/span&gt;-&lt;span class="m"&gt;5&lt;/span&gt;.&lt;span class="m"&gt;1&lt;/span&gt;.&lt;span class="m"&gt;2&lt;/span&gt;; &lt;span class="c"&gt;#去掉这两处前面的注释符号#
&lt;/span&gt;    &lt;span class="n"&gt;passenger_ruby&lt;/span&gt; /&lt;span class="n"&gt;home&lt;/span&gt;/&lt;span class="n"&gt;sofly&lt;/span&gt;/.&lt;span class="n"&gt;rvm&lt;/span&gt;/&lt;span class="n"&gt;gems&lt;/span&gt;/&lt;span class="n"&gt;ruby&lt;/span&gt;-&lt;span class="m"&gt;2&lt;/span&gt;.&lt;span class="m"&gt;3&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;/&lt;span class="n"&gt;wrappers&lt;/span&gt;/&lt;span class="n"&gt;ruby&lt;/span&gt;; &lt;span class="c"&gt;#去掉这两处前面的注释符号#
&lt;/span&gt;
    &lt;span class="n"&gt;include&lt;/span&gt;       &lt;span class="n"&gt;mime&lt;/span&gt;.&lt;span class="n"&gt;types&lt;/span&gt;;
    &lt;span class="n"&gt;default_type&lt;/span&gt;  &lt;span class="n"&gt;application&lt;/span&gt;/&lt;span class="n"&gt;octet&lt;/span&gt;-&lt;span class="n"&gt;stream&lt;/span&gt;;
    &lt;span class="n"&gt;sendfile&lt;/span&gt;        &lt;span class="n"&gt;on&lt;/span&gt;;
    &lt;span class="n"&gt;keepalive_timeout&lt;/span&gt;  &lt;span class="m"&gt;65&lt;/span&gt;;

    &lt;span class="n"&gt;gzip&lt;/span&gt;  &lt;span class="n"&gt;on&lt;/span&gt;;
    &lt;span class="n"&gt;gzip_disable&lt;/span&gt; &lt;span class="s2"&gt;"msie6"&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;server_name&lt;/span&gt;  &lt;span class="n"&gt;localhost&lt;/span&gt;;
        &lt;span class="n"&gt;passenger_enabled&lt;/span&gt; &lt;span class="n"&gt;on&lt;/span&gt;;
        &lt;span class="n"&gt;root&lt;/span&gt;         /&lt;span class="n"&gt;home&lt;/span&gt;/&lt;span class="n"&gt;sofly&lt;/span&gt;/&lt;span class="n"&gt;project&lt;/span&gt;/&lt;span class="n"&gt;public&lt;/span&gt;; &lt;span class="c"&gt;#此处设着为rails工程public文件夹位置
&lt;/span&gt;    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;配置完毕后重启 nginx&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;ps auxw | &lt;span class="nb"&gt;grep &lt;/span&gt;nginx
root     29743  0.0  0.0  10192   564 ?        Ss   13:39   0:00 nginx: master process /opt/nginx/sbin/nginx
sofly    29744  0.0  0.4  10428  4500 ?        S    13:39   0:00 nginx: worker process
sofly    30080  0.0  0.0   5108   792 pts/1    S+   13:42   0:00 &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;--color&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;auto nginx
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo kill &lt;/span&gt;29743
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo&lt;/span&gt; /opt/nginx/sbin/nginx
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;在浏览器中输入服务器 IP，发现并没有显示网页，而是出现如下的话&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;incomplete response received from application&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;What happened...&lt;/p&gt;
&lt;h2 id="Step9: 配置rails工程的production secret_key_base"&gt;Step9: 配置 rails 工程的 production secret_key_base&lt;/h2&gt;
&lt;p&gt;出现上面问题的原因是 rails 生产环境没有配置 secret_key_base 变量，解决方法：&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;project
&lt;span class="nv"&gt;$ &lt;/span&gt;bundle &lt;span class="nb"&gt;exec &lt;/span&gt;rake secret &lt;span class="c"&gt;# rails 4.2.6还需要bundle exec，请根据rails版本自行匹配&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;将输出的一大串字码粘贴到 rails 工程中/config/secrets.yml 去，替换掉该文件中的&amp;lt;%= ENV["SECRET_KEY_BASE"] %&amp;gt;，如下：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="ss"&gt;production:
  secret_key_base: &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sx"&gt;%= ENV["SECRET_KEY_BASE"] %&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后再重启 passenger，（一定要有否则不生效）&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;touch &lt;/span&gt;project/tmp/restart.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;现在再刷新浏览器，就可以发现网站成功显示了。&lt;/p&gt;
&lt;h6 id="此处参考：[http://stackoverflow.com/questions/29241053/incomplete-response-received-from-application-from-nginx-passenger]"&gt;此处参考：[&lt;a href="http://stackoverflow.com/questions/29241053/incomplete-response-received-from-application-from-nginx-passenger" rel="nofollow" target="_blank"&gt;http://stackoverflow.com/questions/29241053/incomplete-response-received-from-application-from-nginx-passenger&lt;/a&gt;]&lt;/h6&gt;
&lt;p&gt;&lt;em&gt;注：若还是失败，请查看/opt/nginx/logs/error.log 中的错误日志&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;PS. 从硬件转行后端之后的第一篇贴，有问题处希望大家指正。以上。&lt;/p&gt;

&lt;p&gt;=====================================================&lt;/p&gt;
&lt;h3 id="持续补充：部署过程中遇到的坑"&gt;持续补充：部署过程中遇到的坑&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Rails production 环境上传并 resize 图片报错：&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;"We're sorry, but something went wrong." &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;原因：没有安装 imagemagick&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install &lt;/span&gt;imagemagick libmagickcore-dev libmagickwand-dev
&lt;/code&gt;&lt;/pre&gt;</description>
      <author>xufeisofly</author>
      <pubDate>Sun, 23 Apr 2017 00:43:36 +0800</pubDate>
      <link>https://ruby-china.org/topics/32851</link>
      <guid>https://ruby-china.org/topics/32851</guid>
    </item>
  </channel>
</rss>
