<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>OrderSun (JK-Sun)</title>
    <link>https://ruby-china.org/OrderSun</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>Rails 接口如何返回 XML</title>
      <description>&lt;p&gt;XML 节点可自定义，类似这种结构&lt;/p&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2019/129783e9-0c56-44af-bf2d-50badb5e8946.png!large" title="" alt=""&gt;&lt;/p&gt;</description>
      <author>OrderSun</author>
      <pubDate>Thu, 18 Jul 2019 14:42:33 +0800</pubDate>
      <link>https://ruby-china.org/topics/38851</link>
      <guid>https://ruby-china.org/topics/38851</guid>
    </item>
    <item>
      <title>MongoDB 日志处理</title>
      <description>&lt;p&gt;秒级的数据存储会产生大量日志，几天就会写满磁盘，现在要对日志做处理，只保留当天的日志。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;方案：&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;1.拆解日志&lt;/p&gt;

&lt;p&gt;2.删除历史日志&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;实现：&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;创建脚本 &lt;code&gt;script.sh&lt;/code&gt; 添加以下内容&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/bin/sh&lt;/span&gt;
&lt;span class="c"&gt;# /mnt/database/mongodb 数据库路径&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'password'&lt;/span&gt; | &lt;span class="nb"&gt;sudo&lt;/span&gt; &lt;span class="nt"&gt;-S&lt;/span&gt; &lt;span class="nb"&gt;kill&lt;/span&gt; &lt;span class="nt"&gt;-SIGUSR1&lt;/span&gt; &lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; /mnt/database/mongodb/mongod.lock&lt;span class="sb"&gt;`&lt;/span&gt;

&lt;span class="c"&gt;# /mnt/log/mongodb 日志文件路径&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'password'&lt;/span&gt; | &lt;span class="nb"&gt;sudo&lt;/span&gt; &lt;span class="nt"&gt;-S&lt;/span&gt; find /mnt/log/mongodb/mongod.log.&lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="nt"&gt;-delete&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;script.sh&lt;/code&gt; 添加执行权限&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;chmod&lt;/span&gt; +x script.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;crontab 定时，执行&lt;code&gt;crontab -e&lt;/code&gt;，添加&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 每天 3 点定时清理&lt;/span&gt;
0 3 &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; /script_path/script.sh
&lt;/code&gt;&lt;/pre&gt;</description>
      <author>OrderSun</author>
      <pubDate>Wed, 08 Aug 2018 16:12:01 +0800</pubDate>
      <link>https://ruby-china.org/topics/37301</link>
      <guid>https://ruby-china.org/topics/37301</guid>
    </item>
    <item>
      <title>Ubuntu16.04 使用 NFS 搭建文件共享系统</title>
      <description>&lt;h2 id="服务端"&gt;服务端&lt;/h2&gt;
&lt;p&gt;安装 nfs 服务器和客户端&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;nfs-kernel-server nfs-common portmap
&lt;/code&gt;&lt;/pre&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;vim /etc/exports
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;修改内容如下：&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# /etc/exports文件的配置格式为：&lt;/span&gt;
&lt;span class="c"&gt;#NFS共享目录 NFS客户端地址1(参数1, 参数2, 参数3......) 客户端地址2(参数1, 参数2, 参数3......)&lt;/span&gt;
/home/workspace/cpm/public/uploads &lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;rw,sync,no_root_squash&lt;span class="o"&gt;)&lt;/span&gt;

&lt;span class="c"&gt;# 各段表达的意思如下，根据实际进行修改&lt;/span&gt;
/home/workspace/cpm/public/uploads：共享的目录
&lt;span class="k"&gt;*&lt;/span&gt;：指定哪些用户可以访问
192.168.1.&lt;span class="k"&gt;*&lt;/span&gt;  指定网段，在该网段中的用户可以挂载
192.168.1.12 只有该用户能挂载
&lt;span class="o"&gt;(&lt;/span&gt;ro,sync,no_root_squash&lt;span class="o"&gt;)&lt;/span&gt;：  权限
        ro : 只读
        rw : 读写
        &lt;span class="nb"&gt;sync&lt;/span&gt; :  同步
        no_root_squash: 不降低root用户的权限
        其他选项man 5 exports 查看
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;重启 NFS 服务&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;service nfs-kernel-server restart
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;服务端搭建完成。&lt;/p&gt;
&lt;h2 id="客户端"&gt;客户端&lt;/h2&gt;
&lt;p&gt;检查客户端和服务端的网络是否连通（ping + 主机 IP）&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ping 192.168.1.118
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;查看服务端的共享目录（showmount -e + 主机 IP）&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;showmount &lt;span class="nt"&gt;-e&lt;/span&gt; 192.168.1.118

&lt;span class="c"&gt;#得到以下结果：&lt;/span&gt;
Export list &lt;span class="k"&gt;for &lt;/span&gt;192.168.1.118:
/home/workspace/cpm/public/uploads &lt;span class="k"&gt;*&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;将该目录挂载到本地&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mount 192.168.1.118:/home/workspace/cpm/public/uploads /mnt/uploads 

&lt;span class="c"&gt;#删除挂载&lt;/span&gt;
umount /mnt/uploads
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;访问本地的 mnt/uploads 目录，就可访问服务端共享的目录了。&lt;/p&gt;
&lt;h2 id="设置开机自动挂载"&gt;设置开机自动挂载&lt;/h2&gt;
&lt;p&gt;当我们重启时，挂载就会消失，每次手动挂载太麻烦，所以要设置开机自动挂载，修改&lt;code&gt;/etc/rc.local&lt;/code&gt;文件&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 挂载命令&lt;/span&gt;
mount 192.168.1.118:/home/workspace/cpm/public/uploads /mnt/uploads
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;重启，测试，一切 OK，大功告成。&lt;/p&gt;</description>
      <author>OrderSun</author>
      <pubDate>Thu, 22 Mar 2018 14:24:35 +0800</pubDate>
      <link>https://ruby-china.org/topics/35288</link>
      <guid>https://ruby-china.org/topics/35288</guid>
    </item>
    <item>
      <title>MongoDB 修改数据库保存位置无法启动？</title>
      <description>&lt;p&gt;环境 ubuntu16.04，项目使用 mongodb，由于数据量较大，想把数据库保存到其他目录，修改如下：&lt;/p&gt;

&lt;p&gt;默认的数据存储目录是/var/lib/mongodb，假设我们的目的路径是/home/mongodb。&lt;/p&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;service mongod stop
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;在配置文件中将 storage.dbPath 项设置为目的路径，修改后如下：&lt;/p&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="s"&gt;storage：&lt;/span&gt;
  &lt;span class="s"&gt;dbPath&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/home/mongodb&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;将原目录下的文件复制到新目录中：&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo cp&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; /var/lib/mongodb/&lt;span class="k"&gt;*&lt;/span&gt; /home/mongodb/
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;将 mongod.lock 文件删除后启动数据库：&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo rm&lt;/span&gt; /home/mongodb/mongod.lock
&lt;span class="nb"&gt;sudo &lt;/span&gt;service mongod start
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;看起来一切都是那么美好~~~~&lt;/p&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;service mongod status
&lt;/code&gt;&lt;/pre&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;● mongod.service - High-performance, schema-free document-oriented database
   Loaded: loaded &lt;span class="o"&gt;(&lt;/span&gt;/lib/systemd/system/mongod.service&lt;span class="p"&gt;;&lt;/span&gt; disabled&lt;span class="p"&gt;;&lt;/span&gt; vendor preset: enabled&lt;span class="o"&gt;)&lt;/span&gt;
   Active: failed &lt;span class="o"&gt;(&lt;/span&gt;Result: exit-code&lt;span class="o"&gt;)&lt;/span&gt; since Tue 2018-03-20 09:35:41 CST&lt;span class="p"&gt;;&lt;/span&gt; 4s ago
     Docs: https://docs.mongodb.org/manual
  Process: 17283 &lt;span class="nv"&gt;ExecStart&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/usr/bin/mongod &lt;span class="nt"&gt;--config&lt;/span&gt; /etc/mongod.conf &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;code&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;exited, &lt;span class="nv"&gt;status&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;100&lt;span class="o"&gt;)&lt;/span&gt;
 Main PID: 17283 &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;code&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;exited, &lt;span class="nv"&gt;status&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;100&lt;span class="o"&gt;)&lt;/span&gt;

Mar 20 09:35:41 smart systemd[1]: Started High-performance, schema-free document-oriented database.
Mar 20 09:35:41 smart systemd[1]: mongod.service: Main process exited, &lt;span class="nv"&gt;code&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;exited, &lt;span class="nv"&gt;status&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;100/n/a
Mar 20 09:35:41 smart systemd[1]: mongod.service: Unit entered failed state.
Mar 20 09:35:41 smart systemd[1]: mongod.service: Failed with result &lt;span class="s1"&gt;'exit-code'&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;那么问题来了，为什么会启动失败呢？
通过查询日志文件得知：&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Attempted to create a lock file on a read-only directory: /home/mongodb, terminating
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;查看&lt;code&gt;/home/mongodb&lt;/code&gt;的权限&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;drwxr-xr-x 4 root root 4.0K Mar 20 10:55 mongodb
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这里的文件所属者不正确，&lt;code&gt;mongodb&lt;/code&gt;这个目录的所有者必须是 mongodb，使用以下命令修改&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# /home&lt;/span&gt;
&lt;span class="nb"&gt;sudo chown&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; mongodb:mongodb &lt;span class="k"&gt;*&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;修改后权限为&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;drwxr-xr-x 4 mongodb mongodb 4.0K Mar 20 10:55 mongodb
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;重启服务，大功告成。&lt;/p&gt;</description>
      <author>OrderSun</author>
      <pubDate>Tue, 20 Mar 2018 09:55:26 +0800</pubDate>
      <link>https://ruby-china.org/topics/35268</link>
      <guid>https://ruby-china.org/topics/35268</guid>
    </item>
    <item>
      <title>Grape 如何查看生成的 URI？</title>
      <description>&lt;p&gt;配置按照 Grape 的教程，怎么样可以看到这种结果：&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;GET /api/statuses/public_timeline
GET /api/statuses/home_timeline
GET /api/statuses/:id
POST /api/statuses
PUT /api/statuses/:id
DELETE /api/statuses/:id
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Rails 执行&lt;code&gt;rake routes&lt;/code&gt;就可以，怎么才能看到 grape api 的呢？&lt;/p&gt;</description>
      <author>OrderSun</author>
      <pubDate>Wed, 07 Mar 2018 21:59:42 +0800</pubDate>
      <link>https://ruby-china.org/topics/35190</link>
      <guid>https://ruby-china.org/topics/35190</guid>
    </item>
    <item>
      <title>如何在任何 model 中获取 Devise 的 current_user 信息？</title>
      <description>&lt;p&gt;方法如下：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;module&lt;/span&gt; &lt;span class="nn"&gt;ActiveRecordExtension&lt;/span&gt;                                                                              
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;current_passport&lt;/span&gt;
    &lt;span class="no"&gt;Thread&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;current&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:passport&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;current_passport&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="no"&gt;Thread&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;current&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:passport&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;value&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;puts_sth&lt;/span&gt;
    &lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="no"&gt;ActiveRecordExtension&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;current_passport&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;username&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

  &lt;span class="kp"&gt;module_function&lt;/span&gt; &lt;span class="ss"&gt;:current_passport&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:current_passport&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;                                                                                                       

&lt;span class="no"&gt;ActiveRecord&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Base&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt; &lt;span class="ss"&gt;:include&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;ActiveRecordExtension&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;</description>
      <author>OrderSun</author>
      <pubDate>Sat, 24 Feb 2018 18:44:21 +0800</pubDate>
      <link>https://ruby-china.org/topics/35073</link>
      <guid>https://ruby-china.org/topics/35073</guid>
    </item>
    <item>
      <title>请问安装了 imagemagick 上传图片出错 ImageMagick/GraphicsMagick is not installed 是什么问题？</title>
      <description>&lt;p&gt;服务器上安装了 imagemagick   libmagickwand-dev，图片上传，使用到裁剪，会出错 ImageMagick/GraphicsMagick is not installed，本地环境上传没有问题，请问是什么原因导致的？
查了各种资料，试了各种方法都无效！！！&lt;/p&gt;</description>
      <author>OrderSun</author>
      <pubDate>Tue, 30 Jan 2018 12:46:34 +0800</pubDate>
      <link>https://ruby-china.org/topics/34969</link>
      <guid>https://ruby-china.org/topics/34969</guid>
    </item>
  </channel>
</rss>
