<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>modacker (Moc)</title>
    <link>https://ruby-china.org/modacker</link>
    <description>I'm Moc, it's work!</description>
    <language>en-us</language>
    <item>
      <title>发现一个神奇的 i18n 的管理工具</title>
      <description>&lt;p&gt;今天在做一个 i18n 的内容，然后想 yaml 不也是一种数据嘛，能不能在线编辑呢？
&lt;a href="https://translation.io" rel="nofollow" target="_blank"&gt;https://translation.io&lt;/a&gt; 这个是通过搜索发现一个网站，31 天的试用期，到期后按照每个 key 每个月收费，分为 active 和 actived，价格各不相同，感兴趣的朋友自己去看看好了，然后发现同类的站点挺多的，我就不一一列举了。&lt;/p&gt;

&lt;p&gt;然后果断搜索了一下 gems list，发现这个神奇的东西，简单 3 个步骤就 ok 了。
&lt;a href="https://github.com/mose/rails-i18nterface" rel="nofollow" target="_blank"&gt;https://github.com/mose/rails-i18nterface&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;首先是 Gemfile，加入&lt;code&gt;gem rails-i18nterface&lt;/code&gt;，然后&lt;code&gt;bundle install&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;路由里添加一段简单的 &lt;code&gt;mount&lt;/code&gt;
&lt;code&gt;ruby
mount RailsI18nterface::Engine =&amp;gt; "/translate", :as =&amp;gt; "translate_engine"
&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;重启服务器，登陆&lt;a href="http://localhost:3000/translate" rel="nofollow" target="_blank"&gt;http://localhost:3000/translate&lt;/a&gt;。&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;仔细看了下，还可以定义 Protect access。只有管理员才能进入。&lt;/p&gt;

&lt;p&gt;然后有个&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;# /config/initializers/development.rb&lt;/span&gt;
&lt;span class="c1"&gt;# i18n interface&lt;/span&gt;
&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;from_locales&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:en&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to_locales&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:"zh-CN"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;我没有设置，然后也没有问题，具体的可以自行研究。&lt;/p&gt;</description>
      <author>modacker</author>
      <pubDate>Mon, 20 Jun 2016 19:14:31 +0800</pubDate>
      <link>https://ruby-china.org/topics/30328</link>
      <guid>https://ruby-china.org/topics/30328</guid>
    </item>
    <item>
      <title>系统升级后的后遗症</title>
      <description>&lt;p&gt;之前一直是 OS X 10.9 Lion，然后 1010 也没升，然后看到 10115 这个版本的几个新特性还不错，然后考虑了一周，前天升级了。
升级过程很顺利，根本不需要什么操作，就这么自动傻瓜地升级了。一开始感觉还是不错的，alfred 也能用，caffenie 也木得问题，就是为什么开机那么慢！！！么慢！！慢！
然后开软件的感觉我的动态视觉好像升级成了大约是 0.0025s 的感觉，一个字就是卡，然后手机搜索了一下，说是系统在自动优化，之前也的确有这样的提示。耐心等待，这么卡顺便把磁盘整理了一下，然后去看了个小电影，然后 disk working light 灭掉了，&lt;code&gt;&amp;gt; restart&lt;/code&gt;。
。
。。
。。。
关个机也是炒鸡慢，暴脾气上来了！！！&lt;code&gt;&amp;gt; restart&lt;/code&gt; x 3!!!!
开个机也是炒鸡慢，暴脾气上来了！！！coc 都搜到一条死鱼，推了。
还是慢！！！！为什么这么慢！！！！
---- 分割线::一天后 ----
WTF! x-code cant running? update!
App store 药丸！download x-code costed 2h!!!
我觉得这是悲剧的开始！！
一堆乱七八糟的整到半夜 2 点。
---- 分割线::二天后 ----
我在升级 rvm，然后要我弄个&lt;code&gt;brew doctor&lt;/code&gt;什么的，没仔细看，现在谁陪我瞎扯淡？&lt;/p&gt;</description>
      <author>modacker</author>
      <pubDate>Sat, 18 Jun 2016 13:54:25 +0800</pubDate>
      <link>https://ruby-china.org/topics/30311</link>
      <guid>https://ruby-china.org/topics/30311</guid>
    </item>
    <item>
      <title>Ruby China 的 markdown 支持注释的写法吗？</title>
      <description>&lt;p&gt;我就是想问问看，类似于&lt;/p&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="p"&gt;*&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;标题1&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="sx"&gt;#title1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="sb"&gt;

    * [标题2](#title2)

&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;h4&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;'title1'&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;对应标题1的内容&lt;span class="nt"&gt;&amp;lt;h4&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;h5&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;'title2'&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;对应标题2的子内容&lt;span class="nt"&gt;&amp;lt;/h5&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这样的写法好像并没有实际效果啊。
是不支持还是其他的写法？&lt;/p&gt;

&lt;hr&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="#title1" title=""&gt;标题 1&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#title2" title=""&gt;标题 2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;/p&gt;&lt;h4 id="title1"&gt;对应标题 1 的内容&lt;/h4&gt;&lt;h4&gt;

&lt;/h4&gt;&lt;h5 id="title2"&gt;对应标题 2 的子内容&lt;/h5&gt;

</description>
      <author>modacker</author>
      <pubDate>Sat, 01 Mar 2014 12:18:42 +0800</pubDate>
      <link>https://ruby-china.org/topics/17587</link>
      <guid>https://ruby-china.org/topics/17587</guid>
    </item>
    <item>
      <title>关于 Ruby interpreter</title>
      <description>&lt;pre class="highlight shell"&gt;&lt;code&gt;Last login: Sat Mar  1 00:14:05 2014 from &lt;span class="k"&gt;*&lt;/span&gt;.&lt;span class="k"&gt;*&lt;/span&gt;.&lt;span class="k"&gt;*&lt;/span&gt;.&lt;span class="k"&gt;*&lt;/span&gt;
Unknown ruby interpreter version &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;do &lt;/span&gt;not know how to handle&lt;span class="o"&gt;)&lt;/span&gt;: textmate.
Could not load ruby textmate.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;一打开 shell，就看到如此鲜艳的大红色的报错。我真心看不懂是个啥玩意啊！&lt;/p&gt;

&lt;p&gt;搜索引擎也翻遍了。&lt;/p&gt;

&lt;p&gt;按照字面意思应该是 ruby 的问题，我是用 rvm 按照的 ruby，先用&lt;code&gt;rvm info&lt;/code&gt;看看是个什么情况&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;rvm info

ruby-2.0.0-p451:

  system:
    &lt;span class="nb"&gt;uname&lt;/span&gt;:       &lt;span class="s2"&gt;"*"&lt;/span&gt;
    system:      &lt;span class="s2"&gt;"ubuntu/12.04/x86_64"&lt;/span&gt;
    bash:        &lt;span class="s2"&gt;"/bin/bash =&amp;gt; GNU bash, version 4.2.24(1)-release (x86_64-pc-linux-gnu)"&lt;/span&gt;
    zsh:         &lt;span class="s2"&gt;" =&amp;gt; not installed"&lt;/span&gt;

  rvm:
    version:      &lt;span class="s2"&gt;"rvm 1.25.19 (stable) by Wayne E. Seguin &amp;lt;wayneeseguin@gmail.com&amp;gt;, Michal Papis &amp;lt;mpapis@gmail.com&amp;gt; [https://rvm.io/]"&lt;/span&gt;
    updated:      &lt;span class="s2"&gt;"1 day 1 hour 38 minutes 1 second ago"&lt;/span&gt;
    path:         &lt;span class="s2"&gt;"/home/wwwroot/.rvm"&lt;/span&gt;

  ruby:
    interpreter:  &lt;span class="s2"&gt;"ruby"&lt;/span&gt;
    version:      &lt;span class="s2"&gt;"2.0.0p451"&lt;/span&gt;
    &lt;span class="nb"&gt;date&lt;/span&gt;:         &lt;span class="s2"&gt;"2014-02-24"&lt;/span&gt;
    platform:     &lt;span class="s2"&gt;"x86_64-linux"&lt;/span&gt;
    patchlevel:   &lt;span class="s2"&gt;"2014-02-24 revision 45167"&lt;/span&gt;
    full_version: &lt;span class="s2"&gt;"ruby 2.0.0p451 (2014-02-24 revision 45167) [x86_64-linux]"&lt;/span&gt;

  homes:
    gem:          &lt;span class="s2"&gt;"/home/wwwroot/.rvm/gems/ruby-2.0.0-p451"&lt;/span&gt;
    ruby:         &lt;span class="s2"&gt;"/home/wwwroot/.rvm/rubies/ruby-2.0.0-p451"&lt;/span&gt;

  binaries:
    ruby:         &lt;span class="s2"&gt;"/home/wwwroot/.rvm/rubies/ruby-2.0.0-p451/bin/ruby"&lt;/span&gt;
    irb:          &lt;span class="s2"&gt;"/home/wwwroot/.rvm/rubies/ruby-2.0.0-p451/bin/irb"&lt;/span&gt;
    gem:          &lt;span class="s2"&gt;"/home/wwwroot/.rvm/rubies/ruby-2.0.0-p451/bin/gem"&lt;/span&gt;
    rake:         &lt;span class="s2"&gt;"/home/wwwroot/.rvm/gems/ruby-2.0.0-p451/bin/rake"&lt;/span&gt;

  environment:
    PATH:         &lt;span class="s2"&gt;"/home/wwwroot/.rvm/gems/ruby-2.0.0-p451/bin:/home/wwwroot/.rvm/gems/ruby-2.0.0-p451@global/bin:/home/wwwroot/.rvm/rubies/ruby-2.0.0-p451/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/wwwroot/.rvm/bin:/home/wwwroot/.rvm/bin"&lt;/span&gt;
    GEM_HOME:     &lt;span class="s2"&gt;"/home/wwwroot/.rvm/gems/ruby-2.0.0-p451"&lt;/span&gt;
    GEM_PATH:     &lt;span class="s2"&gt;"/home/wwwroot/.rvm/gems/ruby-2.0.0-p451:/home/wwwroot/.rvm/gems/ruby-2.0.0-p451@global"&lt;/span&gt;
    MY_RUBY_HOME: &lt;span class="s2"&gt;"/home/wwwroot/.rvm/rubies/ruby-2.0.0-p451"&lt;/span&gt;
    IRBRC:        &lt;span class="s2"&gt;"/home/wwwroot/.rvm/rubies/ruby-2.0.0-p451/.irbrc"&lt;/span&gt;
    RUBYOPT:      &lt;span class="s2"&gt;""&lt;/span&gt;
    gemset:       &lt;span class="s2"&gt;""&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;没有看到我指定了 textmate 来作为 ruby 解释器啊！！&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;rvm gemset list

gemsets &lt;span class="k"&gt;for &lt;/span&gt;ruby-2.0.0-p451 &lt;span class="o"&gt;(&lt;/span&gt;found &lt;span class="k"&gt;in&lt;/span&gt; /home/wwwroot/.rvm/gems/ruby-2.0.0-p451&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;default&lt;span class="o"&gt;)&lt;/span&gt;
   global
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;也不是 gemset 的问题啊！我今天一天没啥事情就动了一下 git 的 hooks，是不是 hooks 的问题呢？&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;cat&lt;/span&gt; &lt;span class="nv"&gt;$git&lt;/span&gt;&lt;span class="nt"&gt;-repo&lt;/span&gt;/project/hooks/post-receive
&lt;span class="c"&gt;#!/bin/sh&lt;/span&gt;
&lt;span class="nb"&gt;unset &lt;/span&gt;GIT_DIR
&lt;span class="nv"&gt;NowPath&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"now path is :"&lt;/span&gt;&lt;span class="nv"&gt;$NowPath&lt;/span&gt;
&lt;span class="nv"&gt;DeployPath&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"/home/wwwroot"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"deploy path is :"&lt;/span&gt;&lt;span class="nv"&gt;$DeployPath&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; &lt;span class="nv"&gt;$DeployPath&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"cd deploy path"&lt;/span&gt;
git fetch origin
git pull
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"deploy done"&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; &lt;span class="nv"&gt;$NowPath&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Successfull"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;我今天总共也就改了这么一个文件啊！昨天还好好的，就是下班的时候在地铁上用手机登了一下 server，但是我也就运行了一个 irb 而已啊！！谁来救救我？？？&lt;/p&gt;</description>
      <author>modacker</author>
      <pubDate>Sat, 01 Mar 2014 00:37:12 +0800</pubDate>
      <link>https://ruby-china.org/topics/17583</link>
      <guid>https://ruby-china.org/topics/17583</guid>
    </item>
    <item>
      <title>在 Aliyun 上快速部署 Ruby on Rails</title>
      <description>&lt;h2 id="在Aliyun上快速部署Ruby on Rails"&gt;在 Aliyun 上快速部署 Ruby on Rails&lt;/h2&gt;
&lt;hr&gt;

&lt;p&gt;莫克&lt;/p&gt;

&lt;p&gt;2014 年 2 月 27 日于上海&lt;/p&gt;
&lt;h2 id="写在前面"&gt;写在前面&lt;/h2&gt;
&lt;p&gt;欢迎阅读《在 Aliyun 上部署 Ruby on Rails》，因为近日正好在 Aliyun©进行 RoR 的部署，之前没有任何的经验，通过搜索引擎也没搜索到比较完整的部署文档。写此文的目的只是做个笔记，下次部署的时候可以更快一点。&lt;/p&gt;

&lt;p&gt;此文大量参考了 [Ruby China][rubychina-link] 的 [《在 Ubuntu 12.04 Server 上安装部署 Ruby on Rails 应用》][railsonubuntu-link]。&lt;/p&gt;

&lt;p&gt;关于我在阅读《在 Ubuntu 12.04 Server 上安装部署 Ruby on Rails 应用》并实践的时候，估计是鄙人学艺不精，总是卡在一些很奇怪的小问题上。这里也算是对《在 Ubuntu…应用》一文的在一些微不足道的补充。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;首先指定一下系统版本，如果是不同的版本的肯定会有一些细节的差别。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;服务器版本&lt;strong&gt;Ubuntu 12.04 64 位 安全加固版&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;本地计算机使用的是&lt;strong&gt;OS X 10.9.1 (13B42)&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;hr&gt;
&lt;h2 id="工具"&gt;工具&lt;/h2&gt;
&lt;p&gt;一个好的工具能让我们事半功倍，在这里列举我使用到的工具，并且我做了一些优化配置，当然你完全可以跳过此部直接阅读实际的部署过程。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;iTerm2，[官方网站][iterm-link]&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;就这么一个工具了。&lt;/p&gt;

&lt;p&gt;iTerm2 是一个替代 OS X 系统自带终端的一个软件，其实它的作用不仅如此，更多的发散应用可以通过搜索引擎自行研究，我这里只会对 iTerm2 做一些关于快速 SSH 连接服务器的设置。&lt;/p&gt;

&lt;p&gt;依赖 iTerm2 的 Profiles，我们可以快速 ssh 到任何一个站点。
配置 Profiles，iTerm2&amp;gt;&amp;gt;&amp;gt;Preferences&amp;gt;&amp;gt;&amp;gt;Profiles。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;快捷键&lt;code&gt;COMMAND + ,&lt;/code&gt;呼出配置界面，选择 Profiles 选项卡。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;通过左下角的&lt;code&gt;+&lt;/code&gt;添加一个新的 Profiles，需要修改两个参数，一个是&lt;strong&gt;Name&lt;/strong&gt;，一个是&lt;strong&gt;Command&lt;/strong&gt;。&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 你可以设置任何你喜欢并且容易分辨的名字&lt;/span&gt;
Name: SSH Server name

&lt;span class="c"&gt;# [ip address]设置成服务器的ip地址&lt;/span&gt;
Command: ssh root@[ip address]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果有需要可以通过&lt;code&gt;-p [Number]&lt;/code&gt;指定端口号&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Command: ssh &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Number] root@[ip address]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后关闭配置窗口，通过快捷键&lt;code&gt;COMMAND + O&lt;/code&gt;来呼出 iTerm2 的 Profiles，选择刚刚配置好的 Profile，在最下面有一排按钮，本别是&lt;del&gt;New Tabs in New Window&lt;/del&gt;、&lt;em&gt;Split Horizontally&lt;/em&gt;、&lt;em&gt;Split Vertically&lt;/em&gt;、&lt;em&gt;New Tab&lt;/em&gt;、&lt;em&gt;New Window&lt;/em&gt;，大家可以自行测试一下，直接回车的话会在默认的&lt;em&gt;New Tab&lt;/em&gt;中打开新的窗口。&lt;/p&gt;

&lt;p&gt;建议勾选&lt;strong&gt;Close this window after opening a profile.&lt;/strong&gt;，毕竟这个窗口有点大，我的屏幕又比较小，看着很不顺眼。&lt;/p&gt;
&lt;h2 id="配置uBuntu"&gt;配置 uBuntu&lt;/h2&gt;
&lt;p&gt;我们第一次通过 iTerm 连接上服务器的时候会要求我们输入 root 的密码，为了安全，建议更改登陆配置使用公钥 (yuè) 登陆。&lt;/p&gt;

&lt;p&gt;使用过 github 的朋友大部分都应该配置过 ssh-keygen，配置很简单，配置好之后会更加方便也更加安全。关于原理之类的我就不赘述了，直接上命令。&lt;/p&gt;

&lt;p&gt;首先我们打开 iTerm2，输入以下命令：&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; ~/.ssh
&lt;span class="nv"&gt;$ &lt;/span&gt;ssh-keygen &lt;span class="nt"&gt;-t&lt;/span&gt; rsa &lt;span class="nt"&gt;-C&lt;/span&gt; &lt;span class="s2"&gt;"[email@example.com]"&lt;/span&gt;
Generating public/private rsa key pair.
Enter file &lt;span class="k"&gt;in &lt;/span&gt;which to save the key &lt;span class="o"&gt;(&lt;/span&gt;/Users/you/.ssh/id_rsa&lt;span class="o"&gt;)&lt;/span&gt;: &lt;span class="o"&gt;[&lt;/span&gt;Press enter]
&lt;span class="nv"&gt;$ &lt;/span&gt;ssh-add id_rsa
Enter passphrase &lt;span class="o"&gt;(&lt;/span&gt;empty &lt;span class="k"&gt;for &lt;/span&gt;no passphrase&lt;span class="o"&gt;)&lt;/span&gt;: &lt;span class="o"&gt;[&lt;/span&gt;Type a passphrase]
Enter same passphrase again: &lt;span class="o"&gt;[&lt;/span&gt;Type passphrase again]
Your identification has been saved &lt;span class="k"&gt;in&lt;/span&gt; /Users/you/.ssh/id_rsa.
Your public key has been saved &lt;span class="k"&gt;in&lt;/span&gt; /Users/you/.ssh/id_rsa.pub.
The key fingerprint is:
01:0f:f4:3b:ca:85:d6:17:a1:7d:f0:68:9d:f0:a2:db email@example.com
&lt;span class="nv"&gt;$ &lt;/span&gt;pbcopy &amp;lt; ~/.ssh/id_rsa.pub
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果遇到&lt;code&gt;-bash: cd: ~/.ssh: No such file or directory&lt;/code&gt;的错误，新建一个.ssh 的文件夹即可。&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# mkdir ~/.ssh&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这时候我们切换到 ssh 的 Profile，输入以下的命令：&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# mkdir ~/.ssh&lt;/span&gt;
&lt;span class="c"&gt;# vi ~/.ssh/authorized_keys&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;通过 vi 把刚刚复制到剪贴板的内容粘贴到 authorized_keys 里，然后保存退出。&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# vi /etc/ssh/sshd_config&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;找到&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#AuthorizedKeysFile      %h/.ssh/authorized_keys
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;把&lt;code&gt;#AuthorizedKeysFile      %h/.ssh/authorized_keys&lt;/code&gt;前面的注释删掉，修改成&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AuthorizedKeysFile      %h/.ssh/authorized_keys
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;按照常规应该是重启 sshd，&lt;code&gt;service sshd restart&lt;/code&gt;结果这个命令报错没有 sshd 这个服务，懒得去 debug 了，直接&lt;code&gt;reboot&lt;/code&gt;好了。&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# reboot&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;有一点需要注意的是我们之前用的是 root 登陆，所以终端显示是&lt;code&gt;#&lt;/code&gt;不是注释。
完成这个简单的小配置之后，我们之后打开 iTerm2 的 Profile 的时候就会直接登陆不再需要输入密码。然后更多的安全设置可以自行去深入，比如：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;修改一个 128 位的 root 密码&lt;/li&gt;
&lt;li&gt;取消密码登录&lt;/li&gt;
&lt;li&gt;禁用 root&lt;/li&gt;
&lt;li&gt;ssh 的 ip 绑定&lt;/li&gt;
&lt;li&gt;以及更多&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;在这之前我们需要新建一个名为 wwwroot 的用户，并且之后的所有操作我们都会切换到这个用户进行。&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# adduser wwwroot&lt;/span&gt;
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information &lt;span class="k"&gt;for &lt;/span&gt;wwwroot
Enter the new value, or press ENTER &lt;span class="k"&gt;for &lt;/span&gt;the default
      Full Name &lt;span class="o"&gt;[]&lt;/span&gt;:
      Room Number &lt;span class="o"&gt;[]&lt;/span&gt;:
      Work Phone &lt;span class="o"&gt;[]&lt;/span&gt;:
      Home Phone &lt;span class="o"&gt;[]&lt;/span&gt;:
      Other &lt;span class="o"&gt;[]&lt;/span&gt;:
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;这里一路回车就好了。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# vi /etc/sudoers&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;找到&lt;code&gt;root ALL=(ALL:ALL) ALL&lt;/code&gt;这一行，在后面添加：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;wwwroot ALL=(ALL:ALL) ALL
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;/etc/sudoers默认是只读权限，使用vi编辑好之后用&lt;code&gt;wq!&lt;/code&gt;命令来强制修改即可，不需要去改权限。&lt;/p&gt;

&lt;p&gt;然后，我们需要切换到这个用户配置一下 ssh-keygen：&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# su - wwwroot&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; ~/.ssh
&lt;span class="nv"&gt;$ &lt;/span&gt;vi ~/.ssh/authorized_keys
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;最后，再配置一下 iTerm2 的 Profiles，具体的过程请参见本文一开始的&lt;a href="#%E5%B7%A5%E5%85%B7" title=""&gt;工具&lt;/a&gt;。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;hr&gt;
&lt;h2 id="阿里云镜像"&gt;阿里云镜像&lt;/h2&gt;
&lt;p&gt;中国有个东西叫&lt;strong&gt;The Great Wall&lt;/strong&gt;，在互联网里也有一个和 The Great Wall 一样伟大的东西。因为这种原因我们需要第一时间去修改一下&lt;strong&gt;源&lt;/strong&gt;。推荐使用阿里云自己提供的 [镜像][aliyunmirrors-link]。&lt;/p&gt;

&lt;p&gt;说句题外话，其实经过我的测试其实默认的源的速度并不会特别的慢。&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;root@aliyun:~# ping cn.archive.ubuntu.com
PING mirrors.sohu.com &lt;span class="o"&gt;(&lt;/span&gt;119.188.36.70&lt;span class="o"&gt;)&lt;/span&gt; 56&lt;span class="o"&gt;(&lt;/span&gt;84&lt;span class="o"&gt;)&lt;/span&gt; bytes of data.
64 bytes from 119.188.36.70: &lt;span class="nv"&gt;icmp_req&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="nv"&gt;ttl&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;55 &lt;span class="nb"&gt;time&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;20.2 ms
64 bytes from 119.188.36.70: &lt;span class="nv"&gt;icmp_req&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;2 &lt;span class="nv"&gt;ttl&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;55 &lt;span class="nb"&gt;time&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;20.2 ms
64 bytes from 119.188.36.70: &lt;span class="nv"&gt;icmp_req&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;3 &lt;span class="nv"&gt;ttl&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;55 &lt;span class="nb"&gt;time&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;20.2 ms
64 bytes from 119.188.36.70: &lt;span class="nv"&gt;icmp_req&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;4 &lt;span class="nv"&gt;ttl&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;55 &lt;span class="nb"&gt;time&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;20.2 ms
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;但是，可以提高 20 倍的速率还是不错的吧！&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;root@Copydays:~# ping mirrors.aliyun.com
PING mirrors.aliyun.com &lt;span class="o"&gt;(&lt;/span&gt;112.124.140.210&lt;span class="o"&gt;)&lt;/span&gt; 56&lt;span class="o"&gt;(&lt;/span&gt;84&lt;span class="o"&gt;)&lt;/span&gt; bytes of data.
64 bytes from 112.124.140.210: &lt;span class="nv"&gt;icmp_req&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="nv"&gt;ttl&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;60 &lt;span class="nb"&gt;time&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1.50 ms
64 bytes from 112.124.140.210: &lt;span class="nv"&gt;icmp_req&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;2 &lt;span class="nv"&gt;ttl&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;60 &lt;span class="nb"&gt;time&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1.56 ms
64 bytes from 112.124.140.210: &lt;span class="nv"&gt;icmp_req&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;3 &lt;span class="nv"&gt;ttl&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;60 &lt;span class="nb"&gt;time&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1.52 ms
64 bytes from 112.124.140.210: &lt;span class="nv"&gt;icmp_req&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;4 &lt;span class="nv"&gt;ttl&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;60 &lt;span class="nb"&gt;time&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1.54 ms
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;编辑/etc/apt/sources.list 文件，在文件最前面添加以下条目，操作前请做好相应备份。&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;deb http://mirrors.aliyun.com/ubuntu/ precise main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ precise-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ precise-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ precise-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ precise-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ precise main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ precise-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ precise-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ precise-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ precise-backports main restricted universe multiverse
&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;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get update
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;查看更多阿里云镜像关于 ubuntu 的 [支持][aliyunmirrorsubuntu-link]&lt;/p&gt;

&lt;hr&gt;
&lt;h2 id="部署环境"&gt;部署环境&lt;/h2&gt;
&lt;p&gt;重新打开 iTerm 使用 wwwroot 的 ssh 连接，以后我们的操作都会在这个 ssh 里完成。&lt;/p&gt;
&lt;h3 id="用RVM安装Ruby"&gt;用 RVM 安装 Ruby&lt;/h3&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;&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;为了能正常工作，RMV 必须安装一些依赖。你可以让 RVM 自动安装它们：&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;rvm requirements
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ruby-China 的指导里有关于 Readline 和 OpenSSL 的 rvm 的安装，虽然感觉可以不装，但是装一下也无妨。&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&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;RVM 并不能管理系统自带的 Ruby，如果想返回系统管理的 Ruby，可以执行&lt;code&gt;rvm reset&lt;/code&gt;，但是这个 ubuntu 没有自带 Ruby，类似一个纯净优化版。&lt;/p&gt;

&lt;p&gt;用 RVM 安装 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.0.0
&lt;span class="nv"&gt;$ &lt;/span&gt;rvm use 2.0.0 &lt;span class="nt"&gt;--default&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果速度比较慢，可以重新替换一次 RVM 的源，10Mb 的文件大约 5 秒就能下好。&lt;/p&gt;

&lt;p&gt;等待编译完成，默认已经顺带把 Rubygems 也装好了。安装完成之后我们来校验一下成果，顺便把 Rubygems 的源也修改成阿里云的源：&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;ruby &lt;span class="nt"&gt;-v&lt;/span&gt;
ruby 2.0.0p451 &lt;span class="o"&gt;(&lt;/span&gt;2014-02-24 revision 45167&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;x86_64-linux]
&lt;span class="nv"&gt;$ &lt;/span&gt;gem &lt;span class="nt"&gt;-v&lt;/span&gt;
2.2.2
&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;span class="nv"&gt;$ &lt;/span&gt;gem sources &lt;span class="nt"&gt;-l&lt;/span&gt;
&lt;span class="k"&gt;***&lt;/span&gt; CURRENT SOURCES &lt;span class="k"&gt;***&lt;/span&gt;

http://mirrors.aliyun.com/rubygems/
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;当然你也可以使用 Taobao 的源：&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;gem sources &lt;span class="nt"&gt;-a&lt;/span&gt; http://ruby.taobao.org/
&lt;span class="k"&gt;***&lt;/span&gt; CURRENT SOURCES &lt;span class="k"&gt;***&lt;/span&gt;

http://ruby.taobao.org
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;[阿里云 Rubygems][aliyunmirrorsrubygems-link]&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;[Taobao Rubygems][taobaorubygems-link]&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="安装Rails："&gt;安装 Rails：&lt;/h3&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="nv"&gt;$ &lt;/span&gt;rails &lt;span class="nt"&gt;-v&lt;/span&gt;
Rails 4.0.3
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2 id="安装数据库"&gt;安装数据库&lt;/h2&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;p&gt;你还可以请参考 [阿里云的 OTS][aliyunots-link]。&lt;/p&gt;

&lt;hr&gt;
&lt;h2 id="Git Server"&gt;Git Server&lt;/h2&gt;
&lt;p&gt;RoR 比较流行的是使用 git，我们来配置一下 Git Server，首先我们需要新建一个名为 git 的用户并且为它添加公钥。&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;adduser git
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;vi /home/git/.ssh/authorized_keys
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;我这里假设你的项目名称是 project 和准备把 git 仓库的目录设定为/opt/git，如果你没有一个/opt/git 目录，需要切换到 root 新建并且把这个目录的所有者改为 git：&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;su - root
&lt;span class="c"&gt;# cd /opt&lt;/span&gt;
&lt;span class="c"&gt;# mkdir git&lt;/span&gt;
&lt;span class="c"&gt;# chown git git&lt;/span&gt;
&lt;span class="c"&gt;# ls -all&lt;/span&gt;
&lt;span class="c"&gt;# total 4&lt;/span&gt;
&lt;span class="c"&gt;# drwxr-xr-x 3 git root 4096 Feb 27 13:50 git&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /opt/git
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;mkdir &lt;/span&gt;project.git
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;project.git
&lt;span class="nv"&gt;$ &lt;/span&gt;git &lt;span class="nt"&gt;--bare&lt;/span&gt; init
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;如果你之前已经有一个 Rails 项目，那么可以跳过此步骤。&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;在本地计算机上，新建一个 Rails 项目，并且把它纳入 git 版本管理中：&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;rails new project &lt;span class="nt"&gt;--skip-bundle&lt;/span&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;git init
&lt;span class="nv"&gt;$ &lt;/span&gt;git add &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s1"&gt;'initial commit'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;我们需要添加 git remote 连接服务器，并且把这个项目 push 到服务器上去。&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;git remote add origin git@[ipaddress]:/opt/git/project.git
&lt;span class="nv"&gt;$ &lt;/span&gt;git push origin master
Counting objects: 59, &lt;span class="k"&gt;done&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;
Delta compression using up to 8 threads.
Compressing objects: 100% &lt;span class="o"&gt;(&lt;/span&gt;48/48&lt;span class="o"&gt;)&lt;/span&gt;, &lt;span class="k"&gt;done&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;
Writing objects: 100% &lt;span class="o"&gt;(&lt;/span&gt;59/59&lt;span class="o"&gt;)&lt;/span&gt;, 13.41 KiB | 0 bytes/s, &lt;span class="k"&gt;done&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;
Total 59 &lt;span class="o"&gt;(&lt;/span&gt;delta 2&lt;span class="o"&gt;)&lt;/span&gt;, reused 0 &lt;span class="o"&gt;(&lt;/span&gt;delta 0&lt;span class="o"&gt;)&lt;/span&gt;
To git@[ipaddress]:/opt/git/project.git
 &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;new branch]      master -&amp;gt; master
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果你的系统没有报错的话，这个时候我们已经完成了 Git Server 的部署。&lt;/p&gt;
&lt;h2 id="部署站点"&gt;部署站点&lt;/h2&gt;
&lt;p&gt;我之前一直没成功，后来仔细阅读了 err logs 后发现是 swap 不足的原因，希望大家能够一次成功！如果你遇到了其他的问题欢迎一起探讨解决。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;在这之前，我们还是先看下 swap 的大小吧：&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;free &lt;span class="nt"&gt;-m&lt;/span&gt;
      total       used       free     shared    buffers     cached
Mem:           490        405         84          0         12        311
-/+ buffers/cache:         80        409
Swap:            0          0          0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;可能是我选择的是低配的原因，根本就没有 Swap，有没有其他使用阿里云的朋友可以来解惑下高配的版本的 Swap 有多少？现在我要来解决下我自己的问题了。&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 mkdir&lt;/span&gt; /swap
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /swap
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo dd &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/dev/zero &lt;span class="nv"&gt;of&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;swapfile &lt;span class="nv"&gt;bs&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1024 &lt;span class="nv"&gt;count&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;500000
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;mkswap &lt;span class="nt"&gt;-f&lt;/span&gt; swapfile
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;swapon swapfile
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;接下来我们要把项目的源代码弄到/home/wwwroot 下面来：&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; ~
&lt;span class="nv"&gt;$ &lt;/span&gt;git clone /opt/git/project.git
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;ls
&lt;/span&gt;project
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;修改你的数据库配置，创建数据库，合并等，这里我就不赘述了，最后你的项目能用&lt;code&gt;rails s&lt;/code&gt;跑起来。&lt;/p&gt;
&lt;h2 id="Passenger for Nginx"&gt;Passenger for Nginx&lt;/h2&gt;
&lt;p&gt;因为我这里使用 passenger for Nginx，Passenger 需要重新编译 Nginx，如果之前有 Nginx 需要卸载掉&lt;code&gt;sudo apt-get remove nginx-common nginx-full nginx&lt;/code&gt;。然后安装 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;span class="nv"&gt;$ &lt;/span&gt;passenger &lt;span class="nt"&gt;-v&lt;/span&gt;
Phusion Passenger version 4.0.37
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;进入 rvmsudo 使用 Passenger 安装 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;如果无法运行我们可以尝试下面这个方法：&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;export &lt;/span&gt;&lt;span class="nv"&gt;ORIG_PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$PATH&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;rvmsudo &lt;span class="nt"&gt;-E&lt;/span&gt; /bin/bash
&lt;span class="c"&gt;# xport PATH="$ORIG_PATH"&lt;/span&gt;
&lt;span class="c"&gt;# /home/wwwroot/.rvm/gems/ruby-2.0.0-p451/wrappers/ruby /home/wwwroot/.rvm/gems/ruby-2.0.0-p451/gems/passenger-4.0.37/bin/passenger-install-nginx-module&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;按照默认的选项一路回车下去，这里输入&lt;code&gt;1&lt;/code&gt;继续回车。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Automatically download and install Nginx?&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;Do you want this installer to download, compile and install Nginx for you?&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;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;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;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;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Whichever you choose, if you already have an existing Nginx configuration file,
then it will be preserved.&lt;/p&gt;

&lt;p&gt;Enter your choice (1 or 2) or press Ctrl-C to abort:1[ENTER]&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;耐心等待编译。&lt;/p&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;p&gt;恭喜你安装成功，若是出现问题可以参考 [Passenger 官方文档][passengerinstall-link]。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;如果你使用的是第二种 rvmsudo 的方法，最后别忘了&lt;code&gt;exit&lt;/code&gt;退出 rvmsudo 模式。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="Nginx init script"&gt;Nginx init script&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;cd&lt;/span&gt; ~/
&lt;span class="nv"&gt;$ &lt;/span&gt;git clone git://github.com/jnstq/rails-nginx-passenger-ubuntu.git
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo mv &lt;/span&gt;rails-nginx-passenger-ubuntu/nginx/nginx /etc/init.d/nginx
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo chmod&lt;/span&gt; +x /etc/init.d/nginx
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;update-rc.d nginx defaults
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="配置Nginx和站点"&gt;配置 Nginx 和站点&lt;/h2&gt;
&lt;p&gt;以下内容几乎照抄《在 Ubuntu…应用》一文。&lt;/p&gt;

&lt;p&gt;打开 Nginx 的 nginx.conf&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;PS: 如果你不是 Passenger 安装的 Nginx，这个配置文件还有可能在/usr/local/nginx/或/etc/nginx 下面&lt;/p&gt;

&lt;p&gt;请参考下面的例子修改：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;user&lt;/span&gt; &lt;span class="n"&gt;wwwroot&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;# 修改成你的系统帐号名，不然项目目录/home/wwwroot这里没有权限&lt;/span&gt;
&lt;span class="n"&gt;worker_processes&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;# 修改成和你 CPU 核数一样&lt;/span&gt;
&lt;span class="n"&gt;pid&lt;/span&gt; &lt;span class="sr"&gt;/var/&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;nginx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pid&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="n"&gt;http&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kp"&gt;include&lt;/span&gt;       &lt;span class="n"&gt;mime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;types&lt;/span&gt;&lt;span class="p"&gt;;&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="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;octet&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;stream&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="n"&gt;client_max_body_size&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="n"&gt;sendfile&lt;/span&gt;        &lt;span class="n"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="n"&gt;access_log&lt;/span&gt; &lt;span class="sr"&gt;/var/&lt;/span&gt;&lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;nginx&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;access&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="n"&gt;error_log&lt;/span&gt; &lt;span class="sr"&gt;/var/&lt;/span&gt;&lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;nginx&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="n"&gt;gzip&lt;/span&gt; &lt;span class="n"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&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="p"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;## ------------ 重点修改内容 --------&lt;/span&gt;

  &lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;    
    &lt;span class="c1"&gt;# 此处用于防止其他的域名绑定到你的网站上面&lt;/span&gt;
    &lt;span class="n"&gt;listen&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt; &lt;span class="n"&gt;default&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;403&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&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;listen&lt;/span&gt;       &lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;server_name&lt;/span&gt;  &lt;span class="n"&gt;you&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;host&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="c1"&gt;# 请替换成你网站的域名&lt;/span&gt;
    &lt;span class="n"&gt;rails_env&lt;/span&gt;    &lt;span class="n"&gt;production&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;root&lt;/span&gt;         &lt;span class="sr"&gt;/home/&lt;/span&gt;&lt;span class="n"&gt;wwwroot&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;project&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="kp"&gt;public&lt;/span&gt;&lt;span class="p"&gt;;&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="p"&gt;;&lt;/span&gt;

    &lt;span class="n"&gt;location&lt;/span&gt; &lt;span class="o"&gt;~&lt;/span&gt; &lt;span class="o"&gt;^&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/assets) {
      access_log        off;
      # 设置 assets 下面的浏览器缓存时间为最大值（由于 Rails Assets Pipline 的文件名是根据文件修改产生的 MD5 digest 文件名，所以此处可以放心开启）
      expires           max; 
    }
  }

  ## ---------------------------------
}
&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;&lt;span class="nb"&gt;sudo&lt;/span&gt; /etc/init.d/nginx start
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;

&lt;p&gt;最后吐槽下 ruby-china 的 markdown 语法和我用的不太一样……&lt;/p&gt;

&lt;p&gt;[rubychina-link]:&lt;a href="http://ruby-china.org/" rel="nofollow" target="_blank"&gt;http://ruby-china.org/&lt;/a&gt; "Ruby China"
[railsonubuntu-link]:&lt;a href="http://ruby-china.org/wiki/install-rails-on-ubuntu-12-04-server" rel="nofollow" target="_blank"&gt;http://ruby-china.org/wiki/install-rails-on-ubuntu-12-04-server&lt;/a&gt;
[iterm-link]:&lt;a href="http://www.iterm2.com/" rel="nofollow" target="_blank"&gt;http://www.iterm2.com/&lt;/a&gt;
[aliyunmirrors-link]:&lt;a href="http://mirrors.aliyun.com/" rel="nofollow" target="_blank"&gt;http://mirrors.aliyun.com/&lt;/a&gt;
[aliyunmirrorsubuntu-link]:&lt;a href="http://mirrors.aliyun.com/help/ubuntu" rel="nofollow" target="_blank"&gt;http://mirrors.aliyun.com/help/ubuntu&lt;/a&gt;
[aliyunmirrorsrubygems-link]:&lt;a href="http://mirrors.aliyun.com/help/rubygems" rel="nofollow" target="_blank"&gt;http://mirrors.aliyun.com/help/rubygems&lt;/a&gt;
[taobaorubygems-link]:&lt;a href="http://ruby.taobao.org/" rel="nofollow" target="_blank"&gt;http://ruby.taobao.org/&lt;/a&gt;
[aliyunots-link]:&lt;a href="http://www.aliyun.com/product/ots/" rel="nofollow" target="_blank"&gt;http://www.aliyun.com/product/ots/&lt;/a&gt;
[passengerinstall-link]:&lt;a href="http://www.modrails.com/install.html" rel="nofollow" target="_blank"&gt;http://www.modrails.com/install.html&lt;/a&gt;&lt;/p&gt;</description>
      <author>modacker</author>
      <pubDate>Fri, 28 Feb 2014 01:46:53 +0800</pubDate>
      <link>https://ruby-china.org/topics/17553</link>
      <guid>https://ruby-china.org/topics/17553</guid>
    </item>
  </channel>
</rss>
