<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>zhongsheng (Zhong Sheng)</title>
    <link>https://ruby-china.org/zhongsheng</link>
    <description/>
    <language>en-us</language>
    <item>
      <title>国内有没有类似 Algolia 搜素的服务？</title>
      <description>&lt;p&gt;最近在改造自己的静态网站，使用的 Bridgetown 生成。想添加一个全文搜素的功能。&lt;/p&gt;

&lt;p&gt;现在好多开源文档都是用的 Algolia，自己注册了一个账号，发现数据最近可以存在香港。&lt;/p&gt;

&lt;p&gt;不知道国内有没有这类服务？&lt;/p&gt;</description>
      <author>zhongsheng</author>
      <pubDate>Sun, 10 Jul 2022 22:34:13 +0800</pubDate>
      <link>https://ruby-china.org/topics/42507</link>
      <guid>https://ruby-china.org/topics/42507</guid>
    </item>
    <item>
      <title>微信的 webview 似乎并不支持 importmap</title>
      <description>&lt;p&gt;微信里面的网页很难调试，alert 都出不来，应该是微信没有加载 js 文件。 &lt;/p&gt;</description>
      <author>zhongsheng</author>
      <pubDate>Thu, 17 Mar 2022 16:30:52 +0800</pubDate>
      <link>https://ruby-china.org/topics/42227</link>
      <guid>https://ruby-china.org/topics/42227</guid>
    </item>
    <item>
      <title>如何实现重复跟帖广告的过滤？</title>
      <description>&lt;p&gt;如题&lt;/p&gt;</description>
      <author>zhongsheng</author>
      <pubDate>Thu, 24 Jun 2021 11:35:40 +0800</pubDate>
      <link>https://ruby-china.org/topics/41404</link>
      <guid>https://ruby-china.org/topics/41404</guid>
    </item>
    <item>
      <title>EC2 差点删库跑路</title>
      <description>&lt;p&gt;事情起因是更换 EC2 实例。将 redhat 实例上的数据盘迁到 Centos8.&lt;/p&gt;

&lt;p&gt;我先将 redhat 停机，给数据盘打了一个快照，然后用快照重新建了一个数据盘挂到了 centos8 实例。&lt;/p&gt;

&lt;p&gt;恐怖的事情发生了，进入 centos&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;podman ps -a
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;空白!!! container 一个都不见了。一般我重启主机 container 都在的。停机啥都不见了，公网 ip 地址都释放了。&lt;/p&gt;

&lt;p&gt;换个 IP 重新进入 redhat 实例，里面的 container 也不见了。大脑一片空白，因为没有数据库备份。以为快照就是安全的。&lt;/p&gt;

&lt;p&gt;经过几个小时的折腾，将之前未停机前做的快照进行了恢复。&lt;/p&gt;

&lt;p&gt;这件事让我学到不少 aws 知识，用了快一年才发现 EC2 Redhat 的价格贵很多。&lt;/p&gt;

&lt;p&gt;那个停止实例的按钮有着释放的效果 (不是关机)&lt;/p&gt;

&lt;p&gt;数据库备份要勤快&lt;/p&gt;</description>
      <author>zhongsheng</author>
      <pubDate>Tue, 23 Mar 2021 09:59:25 +0800</pubDate>
      <link>https://ruby-china.org/topics/41058</link>
      <guid>https://ruby-china.org/topics/41058</guid>
    </item>
    <item>
      <title>修改 rails-ujs 的默认行为</title>
      <description>&lt;pre class="highlight erb"&gt;&lt;code&gt;
&lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;link_to&lt;/span&gt; &lt;span class="s2"&gt;"Dangerous zone"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dangerous_zone_path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="ss"&gt;data: &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="ss"&gt;confirm: &lt;/span&gt;&lt;span class="s1"&gt;'Are you sure?'&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;上面 rails erb 代码会生成一个链接，点击链接会跳出一个浏览器自带的 confirm 对话。
虽然有点不好看，不友好，但勉强能用.
直到有一天我在微信内打开页面发现这个对话框的取消选项变成了关闭网页，一点就关闭了页面。&lt;/p&gt;

&lt;p&gt;在网上各种方法都比较老，不适用于 rails 6 和 webpacker.
自己看了一下 ujs 的源码，下面是我的解决方案：&lt;/p&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Rails&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@rails/ujs&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="nx"&gt;Rails&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;start&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="c1"&gt;// 覆盖原来的confirm&lt;/span&gt;
&lt;span class="nx"&gt;Rails&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;confirm&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;mes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
    &lt;span class="c1"&gt;// 不再跳出confirm对话框&lt;/span&gt;
    &lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setAttribute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;data-anwsered&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;false&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;confirm&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;element&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getAttribute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;data-anwsered&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;true&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;confirm&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;请确认!&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getAttribute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;data-confirm&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="na"&gt;closeIcon&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;buttons&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="na"&gt;confirm&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="na"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;确定&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="na"&gt;btnClass&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;btn-red&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="na"&gt;action&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
                    &lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setAttribute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;data-anwsered&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;true&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                    &lt;span class="c1"&gt;// Rails.fire(element, 'rails.click')&lt;/span&gt;
                    &lt;span class="c1"&gt;// 重新触发点击的动作&lt;/span&gt;
                    &lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;click&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="na"&gt;cancel&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="na"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;取消&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="na"&gt;action&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kd"&gt;function&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="p"&gt;})&lt;/span&gt;
    &lt;span class="c1"&gt;// 很重要&lt;/span&gt;
    &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;preventDefault&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;主要思路就是覆盖原来的 confirm, 使用 jquery-confirm 给按钮添加状态。
通过这个状态来判断是否要继续下面的动作。&lt;/p&gt;

&lt;p&gt;希望对大家有帮助。&lt;/p&gt;</description>
      <author>zhongsheng</author>
      <pubDate>Wed, 06 Nov 2019 22:01:16 +0800</pubDate>
      <link>https://ruby-china.org/topics/39225</link>
      <guid>https://ruby-china.org/topics/39225</guid>
    </item>
  </channel>
</rss>
