<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>dccmmtop (DC)</title>
    <link>https://ruby-china.org/dccmmtop</link>
    <description>五花马，千金裘，呼儿将出换美酒。</description>
    <language>en-us</language>
    <item>
      <title>Passenger + Nginx + Capistrano 部署</title>
      <description>&lt;h2 id="部署Rails"&gt;部署 Rails&lt;/h2&gt;&lt;h3 id="添加新用户"&gt;添加新用户&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;在服务器添加一个新的用户，用户名为 deploy&lt;a href="" title=""&gt;教程&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;执行命令&lt;code&gt;adduser&lt;/code&gt; &lt;/li&gt;
&lt;li&gt;按提示输入密码&lt;/li&gt;
&lt;li&gt;&lt;p&gt;设置一些个人信息，可以直接按 enter 键，设为空&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;添加权限&lt;/p&gt;

&lt;p&gt;在 root 用户下，打开&lt;code&gt;/etc/sudoers&lt;/code&gt;文件&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#&lt;/span&gt;
&lt;span class="c"&gt;# This file MUST be edited with the 'visudo' command as root.&lt;/span&gt;
&lt;span class="c"&gt;#&lt;/span&gt;
&lt;span class="c"&gt;# Please consider adding local content in /etc/sudoers.d/ instead of&lt;/span&gt;
&lt;span class="c"&gt;# directly modifying this file.&lt;/span&gt;
&lt;span class="c"&gt;#&lt;/span&gt;
&lt;span class="c"&gt;# See the man page for details on how to write a sudoers file.&lt;/span&gt;
&lt;span class="c"&gt;#&lt;/span&gt;
Defaults        env_reset
Defaults        mail_badpass
Defaults        &lt;span class="nv"&gt;secure_path&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"&lt;/span&gt;

&lt;span class="c"&gt;# Host alias specification&lt;/span&gt;

&lt;span class="c"&gt;# User alias specification&lt;/span&gt;

&lt;span class="c"&gt;# Cmnd alias specification&lt;/span&gt;

&lt;span class="c"&gt;# User privilege specification&lt;/span&gt;
root    &lt;span class="nv"&gt;ALL&lt;/span&gt;&lt;span class="o"&gt;=(&lt;/span&gt;ALL:ALL&lt;span class="o"&gt;)&lt;/span&gt; ALL
deploy  &lt;span class="nv"&gt;ALL&lt;/span&gt;&lt;span class="o"&gt;=(&lt;/span&gt;ALL:ALL&lt;span class="o"&gt;)&lt;/span&gt; ALL &lt;span class="c"&gt;# 添加这一行，使deploy具有使用sudo的权限&lt;/span&gt;

&lt;span class="c"&gt;# Members of the admin group may gain root privileges&lt;/span&gt;
%admin &lt;span class="nv"&gt;ALL&lt;/span&gt;&lt;span class="o"&gt;=(&lt;/span&gt;ALL&lt;span class="o"&gt;)&lt;/span&gt; ALL

&lt;span class="c"&gt;# Allow members of group sudo to execute any command&lt;/span&gt;
%sudo   &lt;span class="nv"&gt;ALL&lt;/span&gt;&lt;span class="o"&gt;=(&lt;/span&gt;ALL:ALL&lt;span class="o"&gt;)&lt;/span&gt; ALL

&lt;span class="c"&gt;# See sudoers(5) for more information on "#include" directives:&lt;/span&gt;

&lt;span class="c"&gt;#includedir /etc/sudoers.d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id="ruby安装"&gt;ruby 安装&lt;/h3&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;安装&lt;code&gt;rbenv&lt;/code&gt;  &lt;a href="https://ruby-china.org/wiki/rbenv-guide" title=""&gt;教程来源&lt;/a&gt;
&lt;code&gt;sudo deploy&lt;/code&gt;回到 deploy 下&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/rbenv/rbenv.git ~/.rbenv
&lt;span class="c"&gt;# 用来编译安装 ruby&lt;/span&gt;
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
&lt;span class="c"&gt;# 用来管理 gemset, 可选, 因为有 bundler 也没什么必要&lt;/span&gt;
git clone git://github.com/jamis/rbenv-gemset.git  ~/.rbenv/plugins/rbenv-gemset
&lt;span class="c"&gt;# 通过 rbenv update 命令来更新 rbenv 以及所有插件, 推荐&lt;/span&gt;
git clone git://github.com/rkh/rbenv-update.git ~/.rbenv/plugins/rbenv-update
&lt;span class="c"&gt;# 使用 Ruby China 的镜像安装 Ruby, 国内用户推荐&lt;/span&gt;
git clone git://github.com/AndorChen/rbenv-china-mirror.git ~/.rbenv/plugins/rbenv-china-mirror
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后把下面的代码放到&amp;nbsp;&lt;code&gt;~/.bashrc&lt;/code&gt;&amp;nbsp;里&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;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;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/.rbenv/bin:&lt;/span&gt;&lt;span class="nv"&gt;$PATH&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nb"&gt;eval&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;rbenv init -&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后重开一个终端就可以执行 rbenv 了。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;安装 ruby&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;rbenv &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--list&lt;/span&gt;  &lt;span class="c"&gt;# 列出所有 ruby 版本&lt;/span&gt;
rbenv &lt;span class="nb"&gt;install &lt;/span&gt;2.5.0     &lt;span class="c"&gt;# 安装 2.5.0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;安转过程可能出现缺少依赖的错误，可参考&lt;a href="https://gist.github.com/sandyxu/8aceec7e436a6ab9621f" rel="nofollow" target="_blank" title=""&gt;这篇文章解决&lt;/a&gt;
一般解决办法：&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install &lt;/span&gt;autoconf bison build-essential libssl-dev libyaml-dev libreadline6 libreadline6-dev zlib1g zlib1g-dev
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;验证安装是否成功&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;rbenv versions               &lt;span class="c"&gt;# 列出安装的版本&lt;/span&gt;
rbenv version                &lt;span class="c"&gt;# 列出正在使用的版本&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;设置版本&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;rbenv global 2.5.0      &lt;span class="c"&gt;# 默认使用 2.5.0&lt;/span&gt;
rbenv shell 2.5.0       &lt;span class="c"&gt;# 当前的 shell 使用 2.5.0, 会设置一个 `RBENV_VERSION` 环境变量&lt;/span&gt;
rbenv &lt;span class="nb"&gt;local &lt;/span&gt;jruby-1.7.3      &lt;span class="c"&gt;# 当前目录使用 jruby-1.7.3, 会生成一个 `.rbenv-version` 文件&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;last&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;rbenv rehash                 &lt;span class="c"&gt;# 每当切换 ruby 版本和执行 bundle install 之后必须执行这个命令&lt;/span&gt;
rbenv which irb              &lt;span class="c"&gt;# 列出 irb 这个命令的完整路径&lt;/span&gt;
rbenv whence irb             &lt;span class="c"&gt;# 列出包含 irb 这个命令的版本&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;安装&lt;code&gt;bundle&lt;/code&gt;&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gem &lt;span class="nb"&gt;install &lt;/span&gt;bundle
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;安装&lt;code&gt;rails&lt;/code&gt;&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gem &lt;span class="nb"&gt;install &lt;/span&gt;rails
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;安装 nodejs&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;nodejs
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="数据库"&gt;数据库&lt;/h3&gt;
&lt;p&gt;使用 postgresql 数据库&lt;a href="https://www.postgresql.org/download/linux/ubuntu/" rel="nofollow" target="_blank" title=""&gt;教程来源&lt;/a&gt;&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install &lt;/span&gt;postgresql  
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;新建数据库用户&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="nt"&gt;-u&lt;/span&gt; postgres  //切换到数据库的超级管理员
psql                 //进入数据库控制台
create user deploy with password &lt;span class="s1"&gt;'xxxx'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; //新建一个deploy用户，密码是xxx
alter role deploy with createdb&lt;span class="p"&gt;;&lt;/span&gt; //使deploy用户具有创建数据库的权限
alter role deploy with login；//使deploy用户具有登录数据库的权限
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;注意：&lt;/p&gt;

&lt;p&gt;在后面安装 pg gem 时，可能会出现&lt;code&gt;You need to install postgresql-server-dev-X.Y for building a server-side extension or libpq-dev for building a client-side applic
ation&lt;/code&gt;错误，依次执行：&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install &lt;/span&gt;python-psycopg2
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install &lt;/span&gt;libpq-dev
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="nginx passenger 安装"&gt;nginx passenger 安装&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://www.phusionpassenger.com/library/install/nginx/install/oss/xenial/" rel="nofollow" target="_blank" title=""&gt;这里很详细了&lt;/a&gt;&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; dirmngr gnupg
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-key adv &lt;span class="nt"&gt;--keyserver&lt;/span&gt; hkp://keyserver.ubuntu.com:80 &lt;span class="nt"&gt;--recv-keys&lt;/span&gt; 561F9B9CAC40B2F7
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; apt-transport-https ca-certificates
&lt;span class="nb"&gt;sudo &lt;/span&gt;sh &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s1"&gt;'echo deb https://oss-binaries.phusionpassenger.com/apt/passenger xenial main &amp;gt; /etc/apt/sources.list.d/passenger.list'&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; nginx-extras passenger
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;passenger 的配置&lt;/p&gt;

&lt;p&gt;nginx 安装以后，打开&lt;code&gt;/etc/nginx/passenger.conf&lt;/code&gt;会看到&lt;/p&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;&lt;span class="n"&gt;passenger_root&lt;/span&gt; /&lt;span class="n"&gt;usr&lt;/span&gt;/&lt;span class="n"&gt;lib&lt;/span&gt;/&lt;span class="n"&gt;ruby&lt;/span&gt;/&lt;span class="n"&gt;vendor_ruby&lt;/span&gt;/&lt;span class="n"&gt;phusion_passenger&lt;/span&gt;/&lt;span class="n"&gt;locations&lt;/span&gt;.&lt;span class="n"&gt;ini&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;deploy&lt;/span&gt;/.&lt;span class="n"&gt;rbenv&lt;/span&gt;/&lt;span class="n"&gt;shims&lt;/span&gt;/&lt;span class="n"&gt;ruby&lt;/span&gt;; //这里需要修改&lt;span class="n"&gt;ruby&lt;/span&gt;的安装路径
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;which ruby&lt;/code&gt; 可以查看 ruby 的路径&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="Capistrano配置原文教程"&gt;Capistrano 配置&lt;a href="https://ruby-china.org/topics/18616" title=""&gt;原文教程&lt;/a&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;安装必要的包&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;group&lt;/span&gt; &lt;span class="ss"&gt;:development&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
&lt;span class="n"&gt;gem&lt;/span&gt; &lt;span class="s1"&gt;'capistrano'&lt;/span&gt;
&lt;span class="n"&gt;gem&lt;/span&gt; &lt;span class="s1"&gt;'capistrano-bundler'&lt;/span&gt;
&lt;span class="n"&gt;gem&lt;/span&gt; &lt;span class="s1"&gt;'capistrano-rails'&lt;/span&gt;
&lt;span class="n"&gt;gem&lt;/span&gt; &lt;span class="s1"&gt;'capistrano-rbenv'&lt;/span&gt;
&lt;span class="c1"&gt;# Add this if you're using rvm&lt;/span&gt;
&lt;span class="c1"&gt;# gem 'capistrano-rvm'&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;cap install&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;我的 capfile 文件&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Load DSL and set up stages&lt;/span&gt;
&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s2"&gt;"capistrano/setup"&lt;/span&gt;

&lt;span class="c1"&gt;# Include default deployment tasks&lt;/span&gt;
&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s2"&gt;"capistrano/deploy"&lt;/span&gt;

&lt;span class="c1"&gt;# Load the SCM plugin appropriate to your project:&lt;/span&gt;
&lt;span class="c1"&gt;#&lt;/span&gt;
&lt;span class="c1"&gt;# require "capistrano/scm/hg"&lt;/span&gt;
&lt;span class="c1"&gt;# install_plugin Capistrano::SCM::Hg&lt;/span&gt;
&lt;span class="c1"&gt;# or&lt;/span&gt;
&lt;span class="c1"&gt;# require "capistrano/scm/svn"&lt;/span&gt;
&lt;span class="c1"&gt;# install_plugin Capistrano::SCM::Svn&lt;/span&gt;
&lt;span class="c1"&gt;# or&lt;/span&gt;
&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s2"&gt;"capistrano/scm/git"&lt;/span&gt;
&lt;span class="n"&gt;install_plugin&lt;/span&gt; &lt;span class="no"&gt;Capistrano&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;SCM&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Git&lt;/span&gt;

&lt;span class="c1"&gt;# Include tasks from other gems included in your Gemfile&lt;/span&gt;
&lt;span class="c1"&gt;#&lt;/span&gt;
&lt;span class="c1"&gt;# For documentation on these, see for example:&lt;/span&gt;
&lt;span class="c1"&gt;#&lt;/span&gt;
&lt;span class="c1"&gt;#   https://github.com/capistrano/rvm&lt;/span&gt;
&lt;span class="c1"&gt;#   https://github.com/capistrano/rbenv&lt;/span&gt;
&lt;span class="c1"&gt;#   https://github.com/capistrano/chruby&lt;/span&gt;
&lt;span class="c1"&gt;#   https://github.com/capistrano/bundler&lt;/span&gt;
&lt;span class="c1"&gt;#   https://github.com/capistrano/rails&lt;/span&gt;
&lt;span class="c1"&gt;#   https://github.com/capistrano/passenger&lt;/span&gt;
&lt;span class="c1"&gt;#&lt;/span&gt;
&lt;span class="c1"&gt;# require "capistrano/rvm"&lt;/span&gt;
&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s2"&gt;"capistrano/rbenv"&lt;/span&gt;
&lt;span class="c1"&gt;# require "capistrano/chruby"&lt;/span&gt;
&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s2"&gt;"capistrano/bundler"&lt;/span&gt;
&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s2"&gt;"capistrano/rails/assets"&lt;/span&gt;
&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s2"&gt;"capistrano/rails/migrations"&lt;/span&gt;
&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s2"&gt;"capistrano/passenger"&lt;/span&gt;
&lt;span class="n"&gt;set&lt;/span&gt; &lt;span class="ss"&gt;:rbenv_type&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:user&lt;/span&gt;
&lt;span class="n"&gt;set&lt;/span&gt; &lt;span class="ss"&gt;:rbenv_ruby&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'2.5.0'&lt;/span&gt;

&lt;span class="c1"&gt;# Load custom tasks from `lib/capistrano/tasks` if you have any defined&lt;/span&gt;
&lt;span class="no"&gt;Dir&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;glob&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"lib/capistrano/tasks/*.rake"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;each&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;import&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; 

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;我的 deploy.rb 文件&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;# config valid for current version and patch releases of Capistrano&lt;/span&gt;
&lt;span class="n"&gt;lock&lt;/span&gt; &lt;span class="s2"&gt;"~&amp;gt; 3.10.2"&lt;/span&gt;

&lt;span class="n"&gt;set&lt;/span&gt; &lt;span class="ss"&gt;:application&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"script_blog"&lt;/span&gt;
&lt;span class="n"&gt;set&lt;/span&gt; &lt;span class="ss"&gt;:repo_url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"https://github.com/dccmmtop/script_blog.git"&lt;/span&gt;
&lt;span class="c1"&gt;# Default branch is :master&lt;/span&gt;
&lt;span class="c1"&gt;# ask :branch, `git rev-parse --abbrev-ref HEAD`.chomp&lt;/span&gt;

&lt;span class="c1"&gt;# Default deploy_to directory is /var/www/my_app_name&lt;/span&gt;
&lt;span class="n"&gt;set&lt;/span&gt; &lt;span class="ss"&gt;:deploy_to&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"/home/deploy/scrit_blog"&lt;/span&gt;

&lt;span class="c1"&gt;# Default value for :format is :airbrussh.&lt;/span&gt;
&lt;span class="c1"&gt;# set :format, :airbrussh&lt;/span&gt;

&lt;span class="c1"&gt;# You can configure the Airbrussh format using :format_options.&lt;/span&gt;
&lt;span class="c1"&gt;# These are the defaults.&lt;/span&gt;
&lt;span class="c1"&gt;# set :format_options, command_output: true, log_file: "log/capistrano.log", color: :auto, truncate: :auto&lt;/span&gt;

&lt;span class="c1"&gt;# Default value for :pty is false&lt;/span&gt;
&lt;span class="c1"&gt;# set :pty, true&lt;/span&gt;

&lt;span class="c1"&gt;# Default value for :linked_files is []&lt;/span&gt;
&lt;span class="c1"&gt;# 在服务器&amp;lt;project-name&amp;gt;/share/config/ 下，要手动新建这两个文件，&lt;/span&gt;
&lt;span class="n"&gt;append&lt;/span&gt; &lt;span class="ss"&gt;:linked_files&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"config/database.yml"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;"config/secrets.yml"&lt;/span&gt; 

&lt;span class="c1"&gt;# Default value for linked_dirs is []&lt;/span&gt;
&lt;span class="n"&gt;append&lt;/span&gt; &lt;span class="ss"&gt;:linked_dirs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"log"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"tmp/pids"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"tmp/cache"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"tmp/sockets"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"public/system"&lt;/span&gt;

&lt;span class="c1"&gt;# Default value for default_env is {}&lt;/span&gt;
&lt;span class="c1"&gt;# set :default_env, { path: "/opt/ruby/bin:$PATH" }&lt;/span&gt;

&lt;span class="c1"&gt;# Default value for local_user is ENV['USER']&lt;/span&gt;
&lt;span class="c1"&gt;# set :local_user, -&amp;gt; { `git config user.name`.chomp }&lt;/span&gt;

&lt;span class="c1"&gt;# Default value for keep_releases is 5&lt;/span&gt;
&lt;span class="c1"&gt;# set :keep_releases, 5&lt;/span&gt;

&lt;span class="c1"&gt;# Uncomment the following to require manually verifying the host key before first deploy.&lt;/span&gt;
&lt;span class="c1"&gt;# set :ssh_options, verify_host_key: :secure&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;注意&lt;code&gt;append :linked_files, "config/database.yml","config/secrets.yml"&lt;/code&gt; &lt;/p&gt;

&lt;p&gt;&lt;code&gt;database.yml&lt;/code&gt;和&lt;code&gt;secrets.yml&lt;/code&gt;是手动在，&lt;code&gt;share/config/&lt;/code&gt;目录下新建的，一个是连接数据库的相关信息，一个是安全验证相关信息。我的部署目录是&lt;code&gt;scriot_blog/&lt;/code&gt; 就新建  &lt;code&gt;script_blog/share/config/&lt;/code&gt; 目录&lt;/p&gt;

&lt;p&gt;同时新建以上两个文件。&lt;/p&gt;

&lt;p&gt;database.yml&lt;/p&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;production&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
&lt;span class="na"&gt;adapter&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;postgresql&lt;/span&gt;
&lt;span class="na"&gt;pool&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;lt;%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %&amp;gt;&lt;/span&gt;
&lt;span class="na"&gt;timeout&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;5000&lt;/span&gt;
&lt;span class="na"&gt;database&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;production_blog&lt;/span&gt;
&lt;span class="na"&gt;username&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;xxx'&lt;/span&gt;
&lt;span class="na"&gt;password&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;xxx'&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;secrets.yml&lt;/p&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;production&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
&lt;span class="na"&gt;secret_key_base&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;xxxxxx&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;其中&lt;code&gt;secret_key_base&lt;/code&gt;的值是在本地项目下 执行&lt;code&gt;rake secret&lt;/code&gt; 命令生成的。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;deploy/production.rb&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;# server-based syntax&lt;/span&gt;
&lt;span class="c1"&gt;# ======================&lt;/span&gt;
&lt;span class="c1"&gt;# Defines a single server with a list of roles and multiple properties.&lt;/span&gt;
&lt;span class="c1"&gt;# You can define all roles on a single server, or split them:&lt;/span&gt;

&lt;span class="c1"&gt;# server "39.108.138.149", user: "root", roles: %w{app db web}, my_property: :my_value&lt;/span&gt;
&lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="s2"&gt;"xxxx服务器的ip"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;user: &lt;/span&gt;&lt;span class="s2"&gt;"deploy"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;roles: &lt;/span&gt;&lt;span class="sx"&gt;%w{app db web}&lt;/span&gt;
&lt;span class="c1"&gt;# server "example.com", user: "deploy", roles: %w{app web}, other_property: :other_value&lt;/span&gt;
&lt;span class="c1"&gt;# server "db.example.com", user: "deploy", roles: %w{db}&lt;/span&gt;
&lt;span class="c1"&gt;# role-based syntax&lt;/span&gt;
&lt;span class="c1"&gt;# ==================&lt;/span&gt;

&lt;span class="c1"&gt;# Defines a role with one or multiple servers. The primary server in each&lt;/span&gt;
&lt;span class="c1"&gt;# group is considered to be the first unless any hosts have the primary&lt;/span&gt;
&lt;span class="c1"&gt;# property set. Specify the username and a domain or IP for the server.&lt;/span&gt;
&lt;span class="c1"&gt;# Don't use `:all`, it's a meta role.&lt;/span&gt;

&lt;span class="c1"&gt;# role :app, %w{deploy@example.com}, my_property: :my_value&lt;/span&gt;
&lt;span class="c1"&gt;# role :web, %w{user1@primary.com user2@additional.com}, other_property: :other_value&lt;/span&gt;
&lt;span class="c1"&gt;# role :db,  %w{deploy@example.com}&lt;/span&gt;

&lt;span class="c1"&gt;# Configuration&lt;/span&gt;
&lt;span class="c1"&gt;# =============&lt;/span&gt;
&lt;span class="c1"&gt;# You can set any configuration variable like in config/deploy.rb&lt;/span&gt;
&lt;span class="c1"&gt;# These variables are then only loaded and set in this stage.&lt;/span&gt;
&lt;span class="c1"&gt;# For available Capistrano configuration variables see the documentation page.&lt;/span&gt;
&lt;span class="c1"&gt;# http://capistranorb.com/documentation/getting-started/configuration/&lt;/span&gt;
&lt;span class="c1"&gt;# Feel free to add new variables to customise your setup.&lt;/span&gt;

&lt;span class="c1"&gt;# Custom SSH Options&lt;/span&gt;
&lt;span class="c1"&gt;# ==================&lt;/span&gt;
&lt;span class="c1"&gt;# You may pass any option but keep in mind that net/ssh understands a&lt;/span&gt;
&lt;span class="c1"&gt;# limited set of options, consult the Net::SSH documentation.&lt;/span&gt;
&lt;span class="c1"&gt;# http://net-ssh.github.io/net-ssh/classes/Net/SSH.html#method-c-start&lt;/span&gt;
&lt;span class="c1"&gt;#&lt;/span&gt;
&lt;span class="c1"&gt;# Global options&lt;/span&gt;
&lt;span class="c1"&gt;# --------------&lt;/span&gt;
&lt;span class="n"&gt;set&lt;/span&gt; &lt;span class="ss"&gt;:ssh_options&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="ss"&gt;keys: &lt;/span&gt;&lt;span class="sx"&gt;%w(/home/deploy/.ssh/id_rsa)&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="ss"&gt;port: &lt;/span&gt;&lt;span class="n"&gt;xxx&lt;/span&gt;
&lt;span class="c1"&gt;# forward_agent: false,&lt;/span&gt;
&lt;span class="c1"&gt;# auth_methods: %w(password)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;#&lt;/span&gt;
&lt;span class="c1"&gt;# The server-based syntax can be used to override options:&lt;/span&gt;
&lt;span class="c1"&gt;# ------------------------------------&lt;/span&gt;
&lt;span class="c1"&gt;# server "example.com",&lt;/span&gt;
&lt;span class="c1"&gt;#   user: "user_name",&lt;/span&gt;
&lt;span class="c1"&gt;#     keys: %w(/home/user_name/.ssh/id_rsa),&lt;/span&gt;
&lt;span class="c1"&gt;#     forward_agent: false,&lt;/span&gt;
&lt;span class="c1"&gt;#     auth_methods: %w(publickey password)&lt;/span&gt;
&lt;span class="c1"&gt;#     # password: "please use keys"&lt;/span&gt;
&lt;span class="c1"&gt;#   }&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="最后"&gt;最后&lt;/h3&gt;
&lt;p&gt;本地执行&lt;code&gt;cap production deploy&lt;/code&gt;&lt;/p&gt;
&lt;h3 id="欢迎指正"&gt;欢迎指正&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://dccmm.world/topics/%E9%83%A8%E7%BD%B2Rails" rel="nofollow" target="_blank" title=""&gt;原文链接&lt;/a&gt;&lt;/p&gt;</description>
      <author>dccmmtop</author>
      <pubDate>Fri, 20 Jul 2018 10:40:27 +0800</pubDate>
      <link>https://ruby-china.org/topics/37194</link>
      <guid>https://ruby-china.org/topics/37194</guid>
    </item>
    <item>
      <title>websocket client，无法获取订阅信息</title>
      <description>&lt;p&gt;WebSocket 请求的 URL 为：wss://api.fcoin.com/v2/ws&lt;/p&gt;

&lt;p&gt;topic 订阅：depth.L20.xxx&lt;/p&gt;

&lt;p&gt;使用 &lt;code&gt;faye-websocket&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;参照文档：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'faye/websocket'&lt;/span&gt;
&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'eventmachine'&lt;/span&gt;

&lt;span class="no"&gt;EM&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;ws&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Faye&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;WebSocket&lt;/span&gt;&lt;span class="o"&gt;::&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;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'wss://api.fcoin.com/v2/ws'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

  &lt;span class="n"&gt;ws&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt; &lt;span class="ss"&gt;:open&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;event&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
    &lt;span class="nb"&gt;p&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:open&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;ws&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"depth.L100.btcusdt"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 没有用？？？&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

  &lt;span class="n"&gt;ws&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt; &lt;span class="ss"&gt;:message&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;event&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
    &lt;span class="nb"&gt;p&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:message&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;data&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nb"&gt;p&lt;/span&gt; &lt;span class="n"&gt;event&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

  &lt;span class="n"&gt;ws&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt; &lt;span class="ss"&gt;:close&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;event&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
    &lt;span class="nb"&gt;p&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:close&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;code&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reason&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;ws&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kp"&gt;nil&lt;/span&gt;
  &lt;span class="k"&gt;end&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>dccmmtop</author>
      <pubDate>Tue, 19 Jun 2018 15:17:49 +0800</pubDate>
      <link>https://ruby-china.org/topics/36963</link>
      <guid>https://ruby-china.org/topics/36963</guid>
    </item>
    <item>
      <title>Passenger + Nginx + Capistrano Could not find rake-12.3.1</title>
      <description>&lt;pre class="highlight plaintext"&gt;&lt;code&gt;App 11000 output: Error: The application encountered the following error: Could not find rake-12.3.1 in any of the sources (Bundler::GemNotFound)
App 11000 output:     /var/lib/gems/2.3.0/gems/bundler-1.16.2/lib/bundler/spec_set.rb:91:in `block in materialize'
App 11000 output:     /var/lib/gems/2.3.0/gems/bundler-1.16.2/lib/bundler/spec_set.rb:85:in `map!'
App 11000 output:     /var/lib/gems/2.3.0/gems/bundler-1.16.2/lib/bundler/spec_set.rb:85:in `materialize'
App 11000 output:     /var/lib/gems/2.3.0/gems/bundler-1.16.2/lib/bundler/definition.rb:171:in `specs'
App 11000 output:     /var/lib/gems/2.3.0/gems/bundler-1.16.2/lib/bundler/definition.rb:238:in `specs_for'
App 11000 output:     /var/lib/gems/2.3.0/gems/bundler-1.16.2/lib/bundler/definition.rb:227:in `requested_specs'
App 11000 output:     /var/lib/gems/2.3.0/gems/bundler-1.16.2/lib/bundler/runtime.rb:108:in `block in definition_method'
App 11000 output:     /var/lib/gems/2.3.0/gems/bundler-1.16.2/lib/bundler/runtime.rb:20:in `setup'
App 11000 output:     /var/lib/gems/2.3.0/gems/bundler-1.16.2/lib/bundler.rb:107:in `setup'
App 11000 output:     /var/lib/gems/2.3.0/gems/bundler-1.16.2/lib/bundler/setup.rb:20:in `&amp;lt;top (required)&amp;gt;'
App 11000 output:     /usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
App 11000 output:     /usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
App 11000 output:     /usr/lib/ruby/vendor_ruby/phusion_passenger/loader_shared_helpers.rb:363:in `activate_gem'
App 11000 output:     /usr/lib/ruby/vendor_ruby/phusion_passenger/loader_shared_helpers.rb:221:in `block in run_load_path_setup_code'
App 11000 output:     /usr/lib/ruby/vendor_ruby/phusion_passenger/loader_shared_helpers.rb:527:in `running_bundler'
App 11000 output:     /usr/lib/ruby/vendor_ruby/phusion_passenger/loader_shared_helpers.rb:220:in `run_load_path_setup_code'
App 11000 output:     /usr/share/passenger/helper-scripts/rack-preloader.rb:91:in `preload_app'
App 11000 output:     /usr/share/passenger/helper-scripts/rack-preloader.rb:189:in `block in &amp;lt;module:App&amp;gt;'
App 11000 output:     /usr/lib/ruby/vendor_ruby/phusion_passenger/loader_shared_helpers.rb:380:in `run_block_and_record_step_progress'
App 11000 output:     /usr/share/passenger/helper-scripts/rack-preloader.rb:188:in `&amp;lt;module:App&amp;gt;'
App 11000 output:     /usr/share/passenger/helper-scripts/rack-preloader.rb:30:in `&amp;lt;module:PhusionPassenger&amp;gt;'
App 11000 output:     /usr/share/passenger/helper-scripts/rack-preloader.rb:29:in `&amp;lt;main&amp;gt;'
[ E 2018-05-24 01:27:11.0846 10979/Te age/Cor/App/Implementation.cpp:221 ]: Could not spawn process for application /home/deploy/letu_lab_web/current: The application encountered the following error: Could not find rake-12.3.1 in any of the sources (Bundler::GemNotFound)
  Error ID: 870feb42
  Error details saved to: /tmp/passenger-error-uaKtp7.html
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;总是说 Could not find rake-12.3.1，服务器配置如下：
bundle version &lt;code&gt;1.16.2&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;gem version &lt;code&gt;2.7.3&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;ruby version &lt;code&gt;2.5.0&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;rails version &lt;code&gt;5.2.0&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;搞不清哪里有问题&lt;/p&gt;</description>
      <author>dccmmtop</author>
      <pubDate>Thu, 24 May 2018 14:50:29 +0800</pubDate>
      <link>https://ruby-china.org/topics/36821</link>
      <guid>https://ruby-china.org/topics/36821</guid>
    </item>
    <item>
      <title>新分支依赖于未合并的分支</title>
      <description>&lt;p&gt;有个问题，我在 A 分支下建立了一个 topic 模型，现在我需要新建一个 B 分支，这个分支下的功能是基于 topic 模型的，问题是，在 A 分支还没有合并的情况下，我再从主分支新开 B 分支时，是没有 topic 模型的，这时该怎么办？&lt;/p&gt;</description>
      <author>dccmmtop</author>
      <pubDate>Mon, 21 May 2018 11:49:16 +0800</pubDate>
      <link>https://ruby-china.org/topics/36810</link>
      <guid>https://ruby-china.org/topics/36810</guid>
    </item>
    <item>
      <title>else if  and elsif 问题</title>
      <description>&lt;p&gt;下面是一段简单的 ruby 代码，为什么会出现语法错误。&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;tt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="nb"&gt;p&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; 
  &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
    &lt;span class="nb"&gt;p&lt;/span&gt;  &lt;span class="mi"&gt;2&lt;/span&gt;
  &lt;span class="k"&gt;elsif&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;
    &lt;span class="nb"&gt;p&lt;/span&gt; &lt;span class="mi"&gt;3&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;code&gt;end&lt;/code&gt; 程序正常。求解释！&lt;/p&gt;</description>
      <author>dccmmtop</author>
      <pubDate>Mon, 19 Mar 2018 14:36:15 +0800</pubDate>
      <link>https://ruby-china.org/topics/35263</link>
      <guid>https://ruby-china.org/topics/35263</guid>
    </item>
    <item>
      <title>更改配置文件后 (application.yml) 需重启电脑才能生效?</title>
      <description>&lt;p&gt;以前修改过配置文件需要把终端全部关闭了，再重新打开。配置信息才会生效。&lt;br&gt;
现在换了一台机器，发现得重启电脑，配置信息才能生效.(好麻烦...)&lt;br&gt;
大家有没有遇到这个问题？有什么解决办法没？?&lt;/p&gt;</description>
      <author>dccmmtop</author>
      <pubDate>Wed, 15 Nov 2017 09:35:31 +0800</pubDate>
      <link>https://ruby-china.org/topics/34576</link>
      <guid>https://ruby-china.org/topics/34576</guid>
    </item>
    <item>
      <title>部署失败-- bundle: command not found</title>
      <description>&lt;p&gt;下面是我的 deploy.rb&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'mina/bundler'&lt;/span&gt;
&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'mina/rails'&lt;/span&gt;
&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'mina/git'&lt;/span&gt;
&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'mina/rvm'&lt;/span&gt;
&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'mina/puma'&lt;/span&gt;
&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'mina/logs'&lt;/span&gt;
&lt;span class="n"&gt;set&lt;/span&gt; &lt;span class="ss"&gt;:domain&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'********'&lt;/span&gt;
&lt;span class="n"&gt;set&lt;/span&gt; &lt;span class="ss"&gt;:user&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'****'&lt;/span&gt;
&lt;span class="n"&gt;set&lt;/span&gt; &lt;span class="ss"&gt;:deploy_to&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'/home/deploy/dc_forum/'&lt;/span&gt;
&lt;span class="n"&gt;set&lt;/span&gt; &lt;span class="ss"&gt;:repository&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'https://github.com/dccmmtop/dc_forum.git'&lt;/span&gt;   
&lt;span class="n"&gt;set&lt;/span&gt; &lt;span class="ss"&gt;:branch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'master'&lt;/span&gt;
&lt;span class="n"&gt;set&lt;/span&gt; &lt;span class="ss"&gt;:forward_agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt;
&lt;span class="n"&gt;set&lt;/span&gt; &lt;span class="ss"&gt;:shared_dirs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'log'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;set&lt;/span&gt; &lt;span class="ss"&gt;:shared_files&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'config/database.yml'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'config/secrets.yml'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;set&lt;/span&gt; &lt;span class="ss"&gt;:rvm_use_path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'/usr/local/rvm/scripts/rvm'&lt;/span&gt;
&lt;span class="n"&gt;desc&lt;/span&gt; &lt;span class="s1"&gt;'Set up environment.'&lt;/span&gt;
&lt;span class="n"&gt;task&lt;/span&gt; &lt;span class="ss"&gt;:remote_environment&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="n"&gt;invoke&lt;/span&gt; &lt;span class="ss"&gt;:'rvm:use'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'ruby-2.3.3@rails5'&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="n"&gt;desc&lt;/span&gt; &lt;span class="s1"&gt;'Prepare for deployment.'&lt;/span&gt;
&lt;span class="n"&gt;task&lt;/span&gt; &lt;span class="ss"&gt;:setup&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="n"&gt;task&lt;/span&gt; &lt;span class="ss"&gt;:setup&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'log'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'config'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'public/upload'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'tmp/pids'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'tmp/sockets'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;each&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;dir&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
      &lt;span class="n"&gt;command&lt;/span&gt; &lt;span class="sx"&gt;%{mkdir -p "fetch(:deploy_to)/shared/&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;dir&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sx"&gt;"}&lt;/span&gt;
      &lt;span class="n"&gt;command&lt;/span&gt; &lt;span class="sx"&gt;%{chmod g+rx,u+rwx "fetch(:deploy_to)/shared/&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;dir&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sx"&gt;"}&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;

    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'config/database.yml'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'config/secrets.yml'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'config/puma.rb'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;each&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;file&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
      &lt;span class="n"&gt;command&lt;/span&gt; &lt;span class="sx"&gt;%{touch "fetch(:deploy_to)/shared/&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sx"&gt;"}&lt;/span&gt;
      &lt;span class="n"&gt;comment&lt;/span&gt; &lt;span class="sx"&gt;%{Be sure to edit 'shared/&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sx"&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="n"&gt;desc&lt;/span&gt; &lt;span class="s1"&gt;'Deploy current version to the server.'&lt;/span&gt;
&lt;span class="n"&gt;task&lt;/span&gt; &lt;span class="ss"&gt;:deploy&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="n"&gt;deploy&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
    &lt;span class="n"&gt;invoke&lt;/span&gt; &lt;span class="ss"&gt;:'git:clone'&lt;/span&gt;
    &lt;span class="n"&gt;invoke&lt;/span&gt; &lt;span class="ss"&gt;:'deploy:link_shared_paths'&lt;/span&gt;
    &lt;span class="n"&gt;invoke&lt;/span&gt; &lt;span class="ss"&gt;:'bundle:install'&lt;/span&gt;
    &lt;span class="n"&gt;invoke&lt;/span&gt; &lt;span class="ss"&gt;:'rails:db_migrate'&lt;/span&gt;
    &lt;span class="n"&gt;invoke&lt;/span&gt; &lt;span class="ss"&gt;:'rails:assets_precompile'&lt;/span&gt;
    &lt;span class="n"&gt;invoke&lt;/span&gt; &lt;span class="ss"&gt;:'deploy:cleanup'&lt;/span&gt;

    &lt;span class="n"&gt;on&lt;/span&gt; &lt;span class="ss"&gt;:launch&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
      &lt;span class="n"&gt;invoke&lt;/span&gt; &lt;span class="ss"&gt;:'puma:start'&lt;/span&gt;
      &lt;span class="n"&gt;invoke&lt;/span&gt; &lt;span class="ss"&gt;:'puma:phased_restart'&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;code&gt;mina deploy&lt;/code&gt;有如下报错信息&lt;/p&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2017/66da6cc9-a049-46f8-b0d7-9c5cea06ba58.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;大家帮忙看一下怎么解决&lt;/p&gt;</description>
      <author>dccmmtop</author>
      <pubDate>Tue, 14 Nov 2017 11:29:45 +0800</pubDate>
      <link>https://ruby-china.org/topics/34572</link>
      <guid>https://ruby-china.org/topics/34572</guid>
    </item>
    <item>
      <title>lib 下如何使用 rails 里面相关方法</title>
      <description>&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;module&lt;/span&gt; &lt;span class="nn"&gt;CoinDealApi&lt;/span&gt;
  &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Utils&lt;/span&gt;
     &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_object&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;platform&lt;/span&gt;&lt;span class="p"&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;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;info&lt;/span&gt; &lt;span class="s2"&gt;"not found"&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;config/application.rb&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="nb"&gt;require_relative&lt;/span&gt; &lt;span class="s1"&gt;'boot'&lt;/span&gt;

&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'rails/all'&lt;/span&gt;

&lt;span class="c1"&gt;# Require the gems listed in Gemfile, including any gems&lt;/span&gt;
&lt;span class="c1"&gt;# you've limited to :test, :development, or :production.&lt;/span&gt;
&lt;span class="no"&gt;Bundler&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&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;groups&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;module&lt;/span&gt; &lt;span class="nn"&gt;DomesticTrade&lt;/span&gt;
  &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Application&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;Rails&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Application&lt;/span&gt;
    &lt;span class="c1"&gt;# Settings in config/environments/* take precedence over those specified here.&lt;/span&gt;
    &lt;span class="c1"&gt;# Application configuration should go into files in config/initializers&lt;/span&gt;
    &lt;span class="c1"&gt;# -- all .rb files in that directory are automatically loaded.&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;autoload_paths&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="p"&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="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'lib'&lt;/span&gt;&lt;span class="p"&gt;)&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;eager_load_paths&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="p"&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="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'lib/coin_deal_api'&lt;/span&gt;&lt;span class="p"&gt;)&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;/code&gt;&lt;/pre&gt;
&lt;p&gt;报的错误:` get_object': uninitialized constant #&lt;a rel="nofollow" target="_blank"&gt;Class:CoinDealApi::Utils&lt;/a&gt;::Rails (NameError),&lt;/p&gt;

&lt;p&gt;这里应该怎么弄？?&lt;/p&gt;</description>
      <author>dccmmtop</author>
      <pubDate>Tue, 12 Sep 2017 18:00:23 +0800</pubDate>
      <link>https://ruby-china.org/topics/34099</link>
      <guid>https://ruby-china.org/topics/34099</guid>
    </item>
    <item>
      <title>使用 ElasticsSearch 出现 404 的问题</title>
      <description>&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;wechat_query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&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;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"========= &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="n"&gt;search_modules&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;Topic&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
      &lt;span class="n"&gt;search_params&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="ss"&gt;query: &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="ss"&gt;simple_query_string: &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="ss"&gt;query: &lt;/span&gt;&lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="ss"&gt;default_operator: &lt;/span&gt;&lt;span class="s1"&gt;'OR'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="ss"&gt;minimum_should_match: &lt;/span&gt;&lt;span class="s1"&gt;'60%'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="ss"&gt;fields: &lt;/span&gt;&lt;span class="sx"&gt;%w(title body name tags)&lt;/span&gt;
          &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="ss"&gt;highlight: &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="ss"&gt;pre_tags: &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'[h]'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
          &lt;span class="ss"&gt;post_tags: &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'[/h]'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
          &lt;span class="ss"&gt;fields: &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="ss"&gt;title: &lt;/span&gt;&lt;span class="p"&gt;{},&lt;/span&gt; &lt;span class="ss"&gt;body: &lt;/span&gt;&lt;span class="p"&gt;{},&lt;/span&gt; &lt;span class="ss"&gt;name: &lt;/span&gt;&lt;span class="p"&gt;{},&lt;/span&gt; &lt;span class="ss"&gt;tags: &lt;/span&gt;&lt;span class="p"&gt;{}&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="no"&gt;Elasticsearch&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;search_params&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;search_modules&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;def&lt;/span&gt; &lt;span class="nf"&gt;user_interest_query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="n"&gt;items&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
      &lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;','&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;each&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;q&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
        &lt;span class="n"&gt;qs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;wechat_query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;records&lt;/span&gt;
        &lt;span class="n"&gt;items&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;items&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;qs&lt;/span&gt;
      &lt;span class="k"&gt;end&lt;/span&gt;
      &lt;span class="n"&gt;items&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;  
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;当调用 user_interest_query(query) 出现
出现的问题如下:
Transport::Transport::Errors::NotFound: [404] {"error":{"root_cause":[{"type":"index_not_found_exception","reason":"no such index","resource.type":"index_or_alias","resource.id":"topics","index_uuid":"&lt;u&gt;na&lt;/u&gt;","index":"topics"}],"type":"index_not_found_exception","reason":"no such index","resource.type":"index_or_alias","resource.id":"topics","index_uuid":"&lt;u&gt;na&lt;/u&gt;","index":"topics"},"status":404}&lt;/p&gt;</description>
      <author>dccmmtop</author>
      <pubDate>Sun, 06 Aug 2017 15:47:15 +0800</pubDate>
      <link>https://ruby-china.org/topics/33744</link>
      <guid>https://ruby-china.org/topics/33744</guid>
    </item>
    <item>
      <title>关于如何组织 coffee 文件</title>
      <description>&lt;p&gt;我想要在 view/wechat/nodes/下为某个页面使用 js，我在 assets/javascript/如何建 coffee 文件呢？&lt;/p&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2017/edb034f7-4218-4d17-8ea4-6655aaa25d70.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;难道是 /assets/javascript/wechat/nodes.coffee 吗？?&lt;/p&gt;</description>
      <author>dccmmtop</author>
      <pubDate>Wed, 02 Aug 2017 17:45:21 +0800</pubDate>
      <link>https://ruby-china.org/topics/33710</link>
      <guid>https://ruby-china.org/topics/33710</guid>
    </item>
    <item>
      <title>如何写一个页面可以向 show 那样接受参数,路由中该怎么写?</title>
      <description>&lt;p&gt;如何写一个页面可以向 show 那样接受参数，路由中该怎么写？&lt;/p&gt;</description>
      <author>dccmmtop</author>
      <pubDate>Thu, 27 Jul 2017 14:24:03 +0800</pubDate>
      <link>https://ruby-china.org/topics/33647</link>
      <guid>https://ruby-china.org/topics/33647</guid>
    </item>
    <item>
      <title>部分参数出现 Unpermit  </title>
      <description>&lt;p&gt;这是后台要更新数据的方法&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;update&lt;/span&gt;
   &lt;span class="vi"&gt;@node&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="no"&gt;Node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find_by&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="ss"&gt;:params&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="k"&gt;if&lt;/span&gt;  &lt;span class="vi"&gt;@node.update&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;node_params_update&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
     &lt;span class="n"&gt;redirect_to&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;wechat_node_path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="vi"&gt;@node&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="ss"&gt;notice: &lt;/span&gt;&lt;span class="s1"&gt;'修改成功'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
   &lt;span class="k"&gt;else&lt;/span&gt; 
     &lt;span class="n"&gt;redirect_to&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;wechat_node_path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="vi"&gt;@node&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="ss"&gt;alert: &lt;/span&gt;&lt;span class="vi"&gt;@node.errors.full_messages&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;def&lt;/span&gt; &lt;span class="nf"&gt;node_params_update&lt;/span&gt;
   &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:node&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;permit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:access_level&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="ss"&gt;:tag&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="ss"&gt;:name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="ss"&gt;:section_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="ss"&gt;:summary&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;def&lt;/span&gt; &lt;span class="nf"&gt;node_params&lt;/span&gt;
   &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:node&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;permit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="ss"&gt;:section_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="ss"&gt;:summary&lt;/span&gt;&lt;span class="p"&gt;)&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 ruby"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;div&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"panel panel-default"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;div&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"panel-body"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sx"&gt;%= simple_form_for([:wechat,@node]) do |f|%&amp;gt;
    &amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;input&lt;/span&gt; &lt;span class="ss"&gt;:name&lt;/span&gt;&lt;span class="o"&gt;%&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sx"&gt;%= f.input :section_id , :collection =&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="no"&gt;Section&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;all&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;collect&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="n"&gt;s&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="n"&gt;s&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;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;%&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sx"&gt;%= f.input :access_level,:collection=&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"私密"&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;"半公开"&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;"公开"&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="ss"&gt;as: :radio_buttons&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="ss"&gt;label: &lt;/span&gt;&lt;span class="s1"&gt;'状态'&lt;/span&gt;&lt;span class="o"&gt;%&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sx"&gt;%= f.input :tag,label: '标签'%&amp;gt;
    &amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;input&lt;/span&gt; &lt;span class="ss"&gt;:summary&lt;/span&gt; &lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="ss"&gt;as: :text&lt;/span&gt;&lt;span class="o"&gt;%&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;br&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sx"&gt;%= f.button :submit, "修 改",class: 'btn  form-control  btn-success '%&amp;gt;
    &amp;lt;br&amp;gt;
    &amp;lt;br&amp;gt;
    &amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;link_to&lt;/span&gt; &lt;span class="s2"&gt;"取 消"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;circle_more_wechat_nodes_path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="ss"&gt;class: &lt;/span&gt;&lt;span class="s1"&gt;'btn  form-control  btn-info '&lt;/span&gt;&lt;span class="o"&gt;%&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;br&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;br&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sx"&gt;% end &lt;/span&gt;&lt;span class="o"&gt;%&amp;gt;&lt;/span&gt;
  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;div&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;在后台处理数据更新的那一块代码里面，用到是健壮参数，由于在昨天我写 create action 时，用到的 node_params 这个健壮参数中没有 tag 和  access_level 字段。但是今天写 create action 时，需要更新 tag 和 access_level .就很愚蠢的又写了个 node_params_update.让执行 update action 是去 node_params_update 去找参数。结果就是无论如何 tag 和 access_lev 这两个字段无法更新，后台也没有报错。&lt;/p&gt;

&lt;p&gt;后来又仔细看了一遍后台运行的日志，找到了一句 &lt;code&gt;Unpermit tag  access_level&lt;/code&gt; ,很是奇怪，为什么这两个字段回事 Unpermit 的呢，(ˇˍˇ) name 等其他的数据仍然可以正常更新。我尝试着把 node_params 里面也加上这两个字段&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;node_params&lt;/span&gt;
  &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:node&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;permit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:access_level&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="ss"&gt;:tag&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="ss"&gt;:name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="ss"&gt;:section_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="ss"&gt;:summary&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;再次刷新页面，果然可以正常更新了.(其实都用一个 node_params) 就可以了。&lt;/p&gt;

&lt;p&gt;但是我不理解的是为什么在执行 update  action 时，尽管我已经指定它使用的是 (node_params_update),还是会出现 Unpermit 的情况？?&lt;/p&gt;</description>
      <author>dccmmtop</author>
      <pubDate>Thu, 27 Jul 2017 08:50:58 +0800</pubDate>
      <link>https://ruby-china.org/topics/33640</link>
      <guid>https://ruby-china.org/topics/33640</guid>
    </item>
    <item>
      <title>请教一个关于 polymorphic 的问题</title>
      <description>&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2017/310cd489-d9df-4fd6-8901-066842807536.png!large" title="" alt=""&gt;
图中的 as:  该如何理解呢？?&lt;/p&gt;</description>
      <author>dccmmtop</author>
      <pubDate>Tue, 25 Jul 2017 09:43:24 +0800</pubDate>
      <link>https://ruby-china.org/topics/33618</link>
      <guid>https://ruby-china.org/topics/33618</guid>
    </item>
    <item>
      <title>图片处理的一个问题</title>
      <description>&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2017/3533921b-2912-4cda-8428-e2f4ddc739ee.png!large" title="" alt=""&gt;
大家可以解释一下上面函数是什么意思吗？?:md 什么的看不懂&lt;/p&gt;</description>
      <author>dccmmtop</author>
      <pubDate>Mon, 24 Jul 2017 19:53:57 +0800</pubDate>
      <link>https://ruby-china.org/topics/33615</link>
      <guid>https://ruby-china.org/topics/33615</guid>
    </item>
  </channel>
</rss>
