<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>zjude90 (猪头呢)</title>
    <link>https://ruby-china.org/zjude90</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>如何正确地给 ActiveRecord::ConnectionAdapters 打一个 猴子补丁?</title>
      <description>&lt;p&gt;之前遇到了 &lt;a href="https://ruby-china.org/topics/26255" title=""&gt;数据库系统表被修改&lt;/a&gt; 导致的连接失败问题.
然后有人提醒过可以打个  monkey patch .&lt;/p&gt;

&lt;p&gt;monkey patch &lt;strong&gt;看起来&lt;/strong&gt; 好像很简单嘛！对于一个已经声明的模块，require ' &amp;lt;自己修改过补丁文件&amp;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;ActiveRecord&lt;/span&gt;
  &lt;span class="k"&gt;module&lt;/span&gt; &lt;span class="nn"&gt;ConnectionAdapters&lt;/span&gt;
    &lt;span class="k"&gt;module&lt;/span&gt; &lt;span class="nn"&gt;PostgreSQL&lt;/span&gt;
      &lt;span class="k"&gt;module&lt;/span&gt; &lt;span class="nn"&gt;SchemaStatements&lt;/span&gt;
&lt;span class="o"&gt;...&lt;/span&gt;

&lt;span class="n"&gt;修改函数里的sql&lt;/span&gt; &lt;span class="n"&gt;字符串&lt;/span&gt;

&lt;span class="o"&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="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;保存在 config/initializers 里面 , 然后 执行 rails c  想看看效果.
结果是 model 类 依然使用默认的 adapter  代码。所以还是报 &lt;a href="https://ruby-china.org/topics/26255" title=""&gt;老问题的错&lt;/a&gt;
即使我在 console 里执行 &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;'config/initializers/active_monkey'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;依然如此
所以，请问 什么才是 给 ActiveRecord 打一个猴补丁的&lt;strong&gt;正确方式&lt;/strong&gt; 呢？&lt;/p&gt;</description>
      <author>zjude90</author>
      <pubDate>Wed, 01 Jul 2015 18:05:34 +0800</pubDate>
      <link>https://ruby-china.org/topics/26276</link>
      <guid>https://ruby-china.org/topics/26276</guid>
    </item>
    <item>
      <title>如何创建自定义的 database adapter </title>
      <description>&lt;p&gt;我还是 Ror 小白，跟着 教程摸索中 ,一上来就要 自定义一个 ActiveRecord adapter ,实在超出能力范围了。&lt;/p&gt;

&lt;p&gt;是这样子的。我需要连接到一个定制版的 pg 数据库，但是这个数据库的某些系统表名字被 改了，&lt;code&gt;pg_&lt;/code&gt; 被替换成了别的字符串。
所以 ActiveRecord 连接的时候就报错了：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="no"&gt;PG&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;UndefinedTable&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;ERROR&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;  &lt;span class="n"&gt;relation&lt;/span&gt; &lt;span class="s2"&gt;"pg_type"&lt;/span&gt; &lt;span class="n"&gt;does&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;exist&lt;/span&gt;
&lt;span class="no"&gt;LINE&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;               &lt;span class="no"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;pg_type&lt;/span&gt; &lt;span class="n"&gt;as&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;
                           &lt;span class="o"&gt;^&lt;/span&gt;
&lt;span class="p"&gt;:&lt;/span&gt;               &lt;span class="no"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;oid&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;typname&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;typelem&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;typdelim&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;typinput&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rngsubtype&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;typtype&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;typbasetype&lt;/span&gt;
              &lt;span class="no"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;pg_type&lt;/span&gt; &lt;span class="n"&gt;as&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;
              &lt;span class="no"&gt;LEFT&lt;/span&gt; &lt;span class="no"&gt;JOIN&lt;/span&gt; &lt;span class="n"&gt;pg_range&lt;/span&gt; &lt;span class="n"&gt;as&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="no"&gt;ON&lt;/span&gt; &lt;span class="n"&gt;oid&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;rngtypid&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;StatementInvalid&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;PG&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;UndefinedTable&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;ERROR&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;  &lt;span class="n"&gt;relation&lt;/span&gt; &lt;span class="s2"&gt;"pg_type"&lt;/span&gt; &lt;span class="n"&gt;does&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;exist&lt;/span&gt;
&lt;span class="no"&gt;LINE&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;               &lt;span class="no"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;pg_type&lt;/span&gt; &lt;span class="n"&gt;as&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;
                           &lt;span class="o"&gt;^&lt;/span&gt;
&lt;span class="p"&gt;:&lt;/span&gt;               &lt;span class="no"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;oid&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;typname&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;typelem&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;typdelim&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;typinput&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rngsubtype&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;typtype&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;typbasetype&lt;/span&gt;
              &lt;span class="no"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;pg_type&lt;/span&gt; &lt;span class="n"&gt;as&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;
              &lt;span class="no"&gt;LEFT&lt;/span&gt; &lt;span class="no"&gt;JOIN&lt;/span&gt; &lt;span class="n"&gt;pg_range&lt;/span&gt; &lt;span class="n"&gt;as&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="no"&gt;ON&lt;/span&gt; &lt;span class="n"&gt;oid&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;rngtypid&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;数据库因为某些原因是没法换的 (否则我就用 pg 了), 如果还想用 ORM, 就必须把 adapter 换掉了.
我现在找到了 activerecord 里面的 connection_adapter 目录，但 不知道 怎么才能创建一个 新的 Adapter ,以及怎么注册到 activeRecord 里面。&lt;/p&gt;</description>
      <author>zjude90</author>
      <pubDate>Tue, 30 Jun 2015 17:27:25 +0800</pubDate>
      <link>https://ruby-china.org/topics/26255</link>
      <guid>https://ruby-china.org/topics/26255</guid>
    </item>
  </channel>
</rss>
