<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>marssun (孙韬)</title>
    <link>https://ruby-china.org/marssun</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>Mac 环境下搭建 zeromq 配合 ffi-rzmq</title>
      <description>&lt;h2 id="ruby版本"&gt;ruby 版本&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;2.2.1&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="安装zeromq"&gt;安装 zeromq&lt;/h2&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install &lt;/span&gt;zeromq32
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;从目前的实践来看，zero 的最新稳定版本为 4.1.x，但是在实践过程中发现这个最新版本似乎和 mac、ruby 的环境有一定的不吻合，原因自己也没有弄清楚。在查找问题的过程中发现，其他的开发者也遇到的同样的问题，目前我采用的解决方式是选择低版本的 zeromq。在 github 有人已经报告了这个问题，&lt;a href="https://github.com/chuckremes/ffi-rzmq/issues/121#issuecomment-137113116" rel="nofollow" target="_blank" title=""&gt;链接地址&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="安装gem包"&gt;安装 gem 包&lt;/h2&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;gem &lt;span class="nb"&gt;install &lt;/span&gt;ffi-rzmq
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;安装完成后，可以参考 github 中给出的例子进行测试，&lt;a href="https://github.com/imatix/zguide/tree/master/examples/Ruby" rel="nofollow" target="_blank" title=""&gt;示例&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="发生问题时的提示输出"&gt;发生问题时的提示输出&lt;/h2&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;ruby&lt;span class="o"&gt;(&lt;/span&gt;52657,0x10969d000&lt;span class="o"&gt;)&lt;/span&gt; malloc: &lt;span class="k"&gt;***&lt;/span&gt; error &lt;span class="k"&gt;for &lt;/span&gt;object 0x7fa5eb4bb6b8: incorrect checksum &lt;span class="k"&gt;for &lt;/span&gt;freed object - object was probably modified after being freed.
&lt;span class="k"&gt;***&lt;/span&gt; &lt;span class="nb"&gt;set &lt;/span&gt;a breakpoint &lt;span class="k"&gt;in &lt;/span&gt;malloc_error_break to debug
Abort &lt;span class="nb"&gt;trap&lt;/span&gt;: 6
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这个可能是 gem 的 C 扩展中发生的错误，但并不确定，在其他情况下也可能发生上述的错误，从输出的语义来看应该是请求了一个已经被析构的对象。&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Bad address &lt;span class="o"&gt;(&lt;/span&gt;src/fq.cpp:91&lt;span class="o"&gt;)&lt;/span&gt;
Abort &lt;span class="nb"&gt;trap&lt;/span&gt;: 6
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这个是我对测试代码做了一点点修改后出现的提示错误，正是用这条提示错误找到了上面说的 github 中报告的&lt;a href="https://github.com/chuckremes/ffi-rzmq/issues/121#issuecomment-137113116" rel="nofollow" target="_blank" title=""&gt;问题&lt;/a&gt;，并把 zeromq 的版本降到了 3.2。
在将 zeromq 的版本降到 3.2 后，上面例子链接中的示例就可以正常运行了（并没有测试所有的示例）。&lt;/p&gt;</description>
      <author>marssun</author>
      <pubDate>Fri, 13 Nov 2015 16:34:53 +0800</pubDate>
      <link>https://ruby-china.org/topics/28054</link>
      <guid>https://ruby-china.org/topics/28054</guid>
    </item>
    <item>
      <title>屌丝版的 annotate</title>
      <description>&lt;h2 id="annotate介绍"&gt;annotate 介绍&lt;/h2&gt;
&lt;p&gt;annotate 是一个文档类的 gem，可以在 model 中以注释的方式插入到文件中。实际的效果如下图所示：&lt;img src="https://l.ruby-china.com/photo/2015/8426dddaaea6783ec11e8e7312ca24bd.png" title="" alt=""&gt;
在 model 注释了表名、字段名、字段类型和约束。在团队开发的时候可能会涉及多人对一个 model 进行了多次编辑，容易造成团队中的人员对这个 model 的结构理解混乱。在开发的时候引入这个 gem 可以将 model 的表结构清晰的展现在 model 文件中有利于开发人员理解。不仅如此，annotate 注释 tests, fixtures, factories。&lt;/p&gt;
&lt;h2 id="使用方式"&gt;使用方式&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;annotate 默认注释 models, tests, fixtures, factories:
&lt;code&gt;shell
cd /path/to/app
annotate
&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;仅注释 model:
&lt;code&gt;shell
annotate --exclude tests,fixtures,factories,serializers
&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;注释路由:
&lt;code&gt;shell
annotate --routes
&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;删除 model/test/fixture/factory/serializer 里的注释:
&lt;code&gt;shell
annotate --delete
&lt;/code&gt;
# 屌丝版 annotate
因为感觉用不到 annotate 其他的功能只要在 model 里添加注释就可以了，所以就以 rake 的方式做了一个屌丝版的 annotate 步骤如下：
1.编写一个 rake 接受类名作为参数取到对应的类：
&lt;code&gt;ruby
namespace :model do
task :db_structure, [:klass] =&amp;gt; :environment do |t, args|
klass = Class.const_get(args[:klass])
end
end
&lt;/code&gt;
2.取到类的数据库列表信息
&lt;code&gt;ruby
columns = klass.columns
&lt;/code&gt;
3.在 columns 就可以拿到想要的信息了示例如下
&lt;code&gt;ruby
c = columns.first
c.name
c.type
c.sql_type
c.null
c.default
c.limit
c.primary
&lt;/code&gt;
4.依靠约定找到对应的文件
&lt;code&gt;ruby
file = File.expand_path klass.to_s.underscore + ".rb", Rails.root.to_s + "/app/models/" 
&lt;/code&gt;
5.格式化输出
&lt;code&gt;ruby
# @length : 字段长度
# @name：字段
"%-#{@length.to_s}s%2s" % [@name, ""]
&lt;/code&gt;
6.打开文件插入内容
&lt;code&gt;ruby
#@file : 文件路径
#@data_table : 将格式化好的列整合到一个数组中
File.open(@file, "a+") do |f|
  content = f.readlines          
  `&amp;gt; #{@file}`
  content.insert(@data_table)
  content.flatten!
  content.each do |s|
    f.write s
  end
end
&lt;/code&gt;
主要的内容就是上面这些，在编写 rake 的时候感觉很无力的就是，感觉 rake 是破坏面向对象的重灾区，有时候想编写一些类到 rake 文件中，但是感觉又不太合适。。。哎，到底要把 rake 中需要的类写在哪呢？&lt;/li&gt;
&lt;/ul&gt;</description>
      <author>marssun</author>
      <pubDate>Fri, 03 Apr 2015 10:59:25 +0800</pubDate>
      <link>https://ruby-china.org/topics/24975</link>
      <guid>https://ruby-china.org/topics/24975</guid>
    </item>
    <item>
      <title>如何扩展 production.rb 中的配置项</title>
      <description>&lt;p&gt;在实际应用的过程中遇到一个问题，由于项目使用的是 cdn，所以配置了 config.action_controller.asset_host，但是老板有了新的需求，希望有多个 cdn 同时存在，所以我想扩展一下 production.rb 中的配置项加上类似于 config.action_controller.asset_host1、config.action_controller.asset_host2 这样的配置，请问有谁知道怎么做吗？&lt;/p&gt;</description>
      <author>marssun</author>
      <pubDate>Mon, 27 Oct 2014 17:24:44 +0800</pubDate>
      <link>https://ruby-china.org/topics/22288</link>
      <guid>https://ruby-china.org/topics/22288</guid>
    </item>
  </channel>
</rss>
