<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>crazyjacky (Jin Shen)</title>
    <link>https://ruby-china.org/crazyjacky</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>Rails 升级到 7.1.1 之后，尝试升级 Rack 到 3.0，很多 ruotes 直接 404</title>
      <description>&lt;p&gt;大家有遇见过吗？&lt;/p&gt;</description>
      <author>crazyjacky</author>
      <pubDate>Sun, 15 Oct 2023 11:22:29 +0800</pubDate>
      <link>https://ruby-china.org/topics/43399</link>
      <guid>https://ruby-china.org/topics/43399</guid>
    </item>
    <item>
      <title>RANSACK on Rich Text</title>
      <description>&lt;p&gt;最近把论坛的搜索从 SOLR 切换到了 RANSACK，原因 SOLR 在过去的大半年时间挂了两次，并且目前搜索使用并不多，而且数据量也很小，觉得用 RANSACK 反而更稳定。
然后刚切到 RANSACK 就碰到了 rich text 默认无法搜索的情况。具体解决办法如下：&lt;/p&gt;

&lt;p&gt;原 Model：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Post&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;ApplicationRecord&lt;/span&gt;
  &lt;span class="n"&gt;has_rich_text&lt;/span&gt; &lt;span class="ss"&gt;:content&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="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Post&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;ApplicationRecord&lt;/span&gt;
  &lt;span class="n"&gt;has_rich_text&lt;/span&gt; &lt;span class="ss"&gt;:content&lt;/span&gt;
  &lt;span class="n"&gt;has_one&lt;/span&gt; &lt;span class="ss"&gt;:content&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;class_name: &lt;/span&gt;&lt;span class="s1"&gt;'ActionText::RichText'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;as: :record&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这样就可以如下在 view 里面搜索了&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;text_field&lt;/span&gt; &lt;span class="ss"&gt;:title_or_content_body_cont&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;</description>
      <author>crazyjacky</author>
      <pubDate>Sat, 08 Oct 2022 06:04:53 +0800</pubDate>
      <link>https://ruby-china.org/topics/42684</link>
      <guid>https://ruby-china.org/topics/42684</guid>
    </item>
    <item>
      <title>推荐一下 Linode 云服务，对比 AWS 更易用更便宜。</title>
      <description>&lt;p&gt;&lt;a href="https://www.linode.com/" rel="nofollow" target="_blank"&gt;https://www.linode.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;下图中的 postgresql 和 worker02 都是最小单元的 vm，$5/month, mail 是$10/month, 这三个都是用的 linode&lt;/p&gt;

&lt;p&gt;lightsail 是 AWS 服务，$20/month&lt;/p&gt;

&lt;p&gt;AWS 的监控服务 cloudwatch 需要另外付费，不过 Linode 的 longview 可以免费监控 10 个 client，不仅仅是 Linode 的 vm，同样可以监控 AWS 及其他云服务的 vm。&lt;/p&gt;

&lt;p&gt;lightsail 上面跑 apache2 和 rails，mail 和 worker02 也都跑 rails，然后 lightsail 上的 apache2 做 proxy，loadbalancer 到三个 rails 节点&lt;/p&gt;

&lt;p&gt;同时 lightsail 上还跑一个 solr，提供论坛的全文搜索，目前论坛服务还没开放，还在测试阶段。为什么选择 solr 而没有用 postgresql 的 full text search，是因为本地开发环境用的是 sqlite3，想着是不是可以有一个外挂式的服务，可以支持不同的数据库。目前 solr 看起来比较轻量级，同时 &lt;a href="https://github.com/sunspot/sunspot" rel="nofollow" target="_blank"&gt;https://github.com/sunspot/sunspot&lt;/a&gt; 提供了非常好的 rails 的集成。&lt;/p&gt;

&lt;p&gt;另外 lightsail 和 mail 的 vm 上每天还跑爬虫的定时任务，每天爬虫大概爬取 450 万数据（页面），然后更新 postgresql。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/crazyjacky/2180a06e-e0fd-4b60-866c-368130745979.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;另外，rails 本身的一些 metrics 使用 newrelic，免费版也基本够了，提供各种 traffic 相关的 metrics，还能同时收集三个 rails instances 的 log 到一起，这样对于生产环境查看日志非常方便。
&lt;img src="https://l.ruby-china.com/photo/crazyjacky/2cfb504c-5e4a-45dc-b0d7-8c60d9c33c70.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;各种 events，metrcis 都有现成的图表，非常方便。
&lt;img src="https://l.ruby-china.com/photo/crazyjacky/2410871c-9fee-4844-ab85-2e0e46fb20b7.png!large" title="" alt=""&gt;&lt;/p&gt;</description>
      <author>crazyjacky</author>
      <pubDate>Wed, 18 May 2022 05:15:41 +0800</pubDate>
      <link>https://ruby-china.org/topics/42400</link>
      <guid>https://ruby-china.org/topics/42400</guid>
    </item>
    <item>
      <title>纪念一下，终于通过了 google adsense 的审批</title>
      <description>&lt;p&gt;网站以图表为主，google adsense 的申请一直不能通过（估计之前申请了得有 7、8 次了），说网站内容太少，质量不高.
昨天又提交了一次申请，今早起来一看居然通过了。
&lt;img src="https://l.ruby-china.com/photo/crazyjacky/a7111c5d-74d6-49c0-902b-36a2cae23aa5.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;有 impression 就可以有收入，每天挣个饭钱。&lt;/p&gt;</description>
      <author>crazyjacky</author>
      <pubDate>Mon, 16 May 2022 12:30:52 +0800</pubDate>
      <link>https://ruby-china.org/topics/42393</link>
      <guid>https://ruby-china.org/topics/42393</guid>
    </item>
    <item>
      <title>Apache2 mod_proxy 运行一段时间后报 403 Forbidden 的错</title>
      <description>&lt;p&gt;具体配置如下&lt;/p&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;Proxy&lt;/span&gt; &lt;span class="err"&gt;balancer://cluster1&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    BalancerMember http://host1.com:3000 route=1 loadfactor=10 connectiontimeout=120 timeout=120
    BalancerMember http://host2.com:3000 route=2 loadfactor=8 connectiontimeout=120 timeout=120
    BalancerMember http://host3.com:3000 route=3 loadfactor=10 connectiontimeout=120 timeout=120
    ProxySet lbmethod=byrequests
    ProxySet stickysession=ROUTEID
&lt;span class="nt"&gt;&amp;lt;/Proxy&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;VirtualHost&lt;/span&gt; &lt;span class="err"&gt;*:80&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  Redirect permanent / https://host1.com/
  ServerName host1.com
  RewriteEngine on
  RewriteCond %{SERVER_NAME} =host1.com
  RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
&lt;span class="nt"&gt;&amp;lt;/VirtualHost&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;VirtualHost&lt;/span&gt; &lt;span class="err"&gt;*:80&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  Redirect permanent / https://host1.com/
  ServerName www.host1.com
  RewriteEngine on
  RewriteCond %{SERVER_NAME} =www.host1.com
  RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
&lt;span class="nt"&gt;&amp;lt;/VirtualHost&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;VirtualHost&lt;/span&gt; &lt;span class="err"&gt;*:443&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

  ServerName host1.com
  # RewriteEngine On
  # RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]

  SSLEngine on
  SSLProxyEngine on

  &lt;span class="nt"&gt;&amp;lt;IfModule&lt;/span&gt; &lt;span class="err"&gt;headers_module&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      Header always edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure
      Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains"
      Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
  &lt;span class="nt"&gt;&amp;lt;/IfModule&amp;gt;&lt;/span&gt;

  ServerAlias       host1.com
  Include    /etc/letsencrypt/options-ssl-apache.conf
  SSLCertificateFile  /etc/letsencrypt/live/host1.com/fullchain.pem
  SSLCertificateKeyFile /etc/letsencrypt/live/host1.com/privkey.pem

  ProxyRequests Off
  #ProxyPreserveHost On
  ProxyPass /server-status !
  ProxyPass / balancer://cluster1/
  ProxyPassReverse / balancer://cluster1/
&lt;span class="nt"&gt;&amp;lt;/VirtualHost&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;每个 host 上面通过 &lt;code&gt;puma&lt;/code&gt; 启动 rails 服务&lt;/p&gt;

&lt;p&gt;运行一段时间后，apache 那边就会报 403 的错。
请问这是什么问题？怎么解决？&lt;/p&gt;

&lt;p&gt;查看了 apache log，有两个错误信息：&lt;/p&gt;

&lt;p&gt;&lt;code&gt;AH00898: Error reading from remote server returned by /xxx&lt;/code&gt;
&lt;code&gt;AH01102: error reading status line from remote server host1&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Update:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;AH01102&lt;/code&gt; 是 timeout，应该是 proxy 到 backend 超时了，因为有一个 host 的配置比较低，如果 requests 多了，cpu/memory 会用满，然后就会导致连接超时。
解决办法：增加 timeout 的时间，默认是 5 秒，改到了 60 秒。&lt;/p&gt;

&lt;p&gt;&lt;code&gt;AH00898&lt;/code&gt;是&lt;code&gt;SSL Handshake&lt;/code&gt;相关的错误，proxy 是 enable SSL，而 backend 没有，不知道会不会是这个原因。
&lt;a href="https://serverfault.com/questions/538086/proxyerror-ah00898-error-during-ssl-handshake-with-remote-server" rel="nofollow" target="_blank"&gt;https://serverfault.com/questions/538086/proxyerror-ah00898-error-during-ssl-handshake-with-remote-server&lt;/a&gt;
我先按照上面这个试试，再看看是否能解决问题。&lt;/p&gt;</description>
      <author>crazyjacky</author>
      <pubDate>Wed, 27 Apr 2022 11:26:45 +0800</pubDate>
      <link>https://ruby-china.org/topics/42347</link>
      <guid>https://ruby-china.org/topics/42347</guid>
    </item>
    <item>
      <title>请教一下，puma 如何记录 state？</title>
      <description>&lt;p&gt;我在启动的时候加了 statefile 的参数，也生成了 statefile，但是里面只是记录了 PID，并没有统计信息。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/ylecuyer/puma-status" rel="nofollow" target="_blank"&gt;https://github.com/ylecuyer/puma-status&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;这个 github 里面提到说可以看统计信息。&lt;/p&gt;

&lt;p&gt;请问，如何记录 puma 服务器的统计信息？&lt;/p&gt;</description>
      <author>crazyjacky</author>
      <pubDate>Tue, 26 Apr 2022 11:39:42 +0800</pubDate>
      <link>https://ruby-china.org/topics/42343</link>
      <guid>https://ruby-china.org/topics/42343</guid>
    </item>
    <item>
      <title>Ruby 3.1 on Rails</title>
      <description>&lt;h2 id="Details - if you are interested"&gt;Details - if you are interested&lt;/h2&gt;&lt;h3 id="Maintenance Policy for Ruby on Rails"&gt;Maintenance Policy for Ruby on Rails&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://guides.rubyonrails.org/maintenance_policy.html" rel="nofollow" target="_blank"&gt;https://guides.rubyonrails.org/maintenance_policy.html&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;As of Dec 25, 2021, Supporting Ruby 3.1 with Rails should not be security issues.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rails 7.0.Z accepts bug fixes.&lt;/li&gt;
&lt;li&gt;Rails 6.1.Z accepts security issues only.&lt;/li&gt;
&lt;li&gt;Rails 6.0.Z accepts severe security issues only.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="Changes to support Ruby 3.1"&gt;Changes to support Ruby 3.1&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Add Class#descendants&lt;/li&gt;
&lt;li&gt;Psych 4 support&lt;/li&gt;
&lt;li&gt;net-smtp, net-imap, net-pop are bundled gems&lt;/li&gt;
&lt;li&gt;Ruby 3.1 performance optimization&lt;/li&gt;
&lt;li&gt;DidYouMean::SPELL_CHECKERS.merge!(error_name =&amp;gt; spell_checker)' has been deprecated.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;详情见原文：
&lt;a href="https://gist.github.com/claudiug/bdc2fb70b10d19513208c816588aed92" rel="nofollow" target="_blank"&gt;https://gist.github.com/claudiug/bdc2fb70b10d19513208c816588aed92&lt;/a&gt;&lt;/p&gt;</description>
      <author>crazyjacky</author>
      <pubDate>Tue, 04 Jan 2022 09:50:02 +0800</pubDate>
      <link>https://ruby-china.org/topics/42050</link>
      <guid>https://ruby-china.org/topics/42050</guid>
    </item>
    <item>
      <title>http://gethomeland.com 已无法访问？</title>
      <description>&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/crazyjacky/a53c1a1c-5338-4c00-b8a2-73cf45f4151c.png!large" title="" alt=""&gt;&lt;/p&gt;</description>
      <author>crazyjacky</author>
      <pubDate>Sun, 24 Oct 2021 10:32:57 +0800</pubDate>
      <link>https://ruby-china.org/topics/41796</link>
      <guid>https://ruby-china.org/topics/41796</guid>
    </item>
  </channel>
</rss>
