<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>bluecoda (Sen)</title>
    <link>https://ruby-china.org/bluecoda</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>尝鲜 Rails 7 的 esbuild，谈谈遇到的坑</title>
      <description>&lt;p&gt;DHH 最近很高产，新出了 2 个 gem: jsbundling-rails 和 cssbundling-rails，虽然才 0.1.x(本文用的 0.1.1)，肯定还有很多 bug，但是我已经迫不及待想试试看 esbuild 的速度了。手头上有个项目，用了 tailwind，stimulus，用 webpack 编译速度并不快，感觉这个项目正好合适，马上开干。&lt;/p&gt;

&lt;p&gt;这两个 gem 理解起来很简单，jsbundling 可以通过 esbuild 把 js 编译到 app/assets/builds，cssbundling 也类似，我用的 tailwind，默认会使用 tailwindcss cli 编译 css 到 app/assets/builds，然后通过 app/assets/config/manifest.js 引入对应文件，从而在 layout 中直接引用编译好的文件。开始之前，记得先把 webpacker 从 gemfile 里去掉。&lt;/p&gt;
&lt;h4 id="js部分遇到的问题："&gt;js 部分遇到的问题：&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;图片无法引入。之前的 css 是通过 js 直接 import 的，现在需要分开处理，所以简单的把 import css 的代码移除即可。&lt;/li&gt;
&lt;li&gt;stimulus 引入的代码报错。之前 webpack 有个用法，已经无法使用，我用了一个 js 包帮忙处理：esbuild-plugin-stimulus。跟着文档写就行，这样就不需要一个个 controller 手动引入方便许多。
&lt;code&gt;js
const context = require.context("./controllers", true, /\.js$/);
application.load(definitionsFromContext(context));
&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;js_compressor 我们换成了 terser&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id="css部分遇到的问题:"&gt;css 部分遇到的问题：&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;编译报错，我们把之前写的 tailwind 相关的 css 代码都放到 applcation.tailwind.css 中，有些 tailwind 代码还是没有展开，所以研究之后，用 postcss 的方式进行编译后问题得到解决：tailwindcss --postcss -i ./app/assets/stylesheets/tailwind/application.tailwind.scss -o ./app/assets/builds/_application.scss。此处因为我们在这个 css 上套了一层 assets pipeline，所以用这个输出 scss 的方式，不要照搬。postcss 的配置就用 webpack 之前写好的，也可以继续 purge。&lt;/li&gt;
&lt;li&gt;因为我们之前写的 tailwind 相关的 css 没办法给 assets pipeline 编译，所以是 tailwindcss cli 输出 scss -&amp;gt; 给 assets pipline 再来一次，虽然有点脱裤子放屁，但至少能编译了。&lt;/li&gt;
&lt;li&gt;css compressor 我们换成了 sassc-rails&lt;/li&gt;
&lt;li&gt;尽管如此，&lt;a href="/tailwindcss" class="user-mention" title="@tailwindcss"&gt;&lt;i&gt;@&lt;/i&gt;tailwindcss&lt;/a&gt;/typography 还是不能用，必须用的最好等等&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id="最后遇到的大坑："&gt;最后遇到的大坑：&lt;/h4&gt;
&lt;p&gt;放到服务器上，发现 esbuild 的 js 文件没有得到正确的输出到 public/assets 中，我认为有用的解决办法：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;升级到 ruby 最新版，如 2.6.2 最算无法升级到 2.7，也请至少升级到 2.6.8（写文时最新的 2.6 版本）&lt;/li&gt;
&lt;li&gt;确保 app/assets/builds 正确 push 到了 git 服务器，因为这个目录在 gem 的安装过程中默认会加入.gitignore，所以导致就算目录下有.gitkeep 文件也无法被提交。先把.gitignore 的代码去掉，commit push 后再加回来。&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;至此，我们选择了 tailwind 输出的代码给 assets pipeline 再压一次，虽然很丑，但是可以用。js 则直接使用 esbuild 的。不得不说，esbuild 的速度是真的很快。这是一次简单的尝鲜，希望能抛砖引玉。&lt;/p&gt;</description>
      <author>bluecoda</author>
      <pubDate>Mon, 13 Sep 2021 10:43:48 +0800</pubDate>
      <link>https://ruby-china.org/topics/41679</link>
      <guid>https://ruby-china.org/topics/41679</guid>
    </item>
    <item>
      <title>热部署</title>
      <description>&lt;p&gt;之前用 go 做了个东西，发现无法热部署，感觉太不爽，因为服务要长时间运行
看了 erlang/elixir 可以代码热部署，有点跃跃欲试啊&lt;/p&gt;</description>
      <author>bluecoda</author>
      <pubDate>Fri, 19 Sep 2014 11:47:43 +0800</pubDate>
      <link>https://ruby-china.org/topics/21605</link>
      <guid>https://ruby-china.org/topics/21605</guid>
    </item>
    <item>
      <title>Rust 1.0 beta 年底要来了</title>
      <description>&lt;p&gt;&lt;a href="http://blog.rust-lang.org/2014/09/15/Rust-1.0.html" rel="nofollow" target="_blank"&gt;http://blog.rust-lang.org/2014/09/15/Rust-1.0.html&lt;/a&gt;&lt;/p&gt;</description>
      <author>bluecoda</author>
      <pubDate>Wed, 17 Sep 2014 15:29:59 +0800</pubDate>
      <link>https://ruby-china.org/topics/21574</link>
      <guid>https://ruby-china.org/topics/21574</guid>
    </item>
    <item>
      <title>我爱 golang</title>
      <description>&lt;p&gt;有段时间，看到 ruby 社区一大堆人在喷 go 语言靠的是爹发展起来的。赞 rust 如何如何好。
比如这里：&lt;a href="https://ruby-china.org/topics/14407?page=1" rel="nofollow" target="_blank"&gt;https://ruby-china.org/topics/14407?page=1&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;好了，前段时间正好有个需求，写一个 socks5 代理，要联合 rails 做 authentication。
思来想去，这里的 socks5 代理要求高并发，用 EM 其实是一个蛮不错的选择，但是无奈我担心 ruby 的 gc 到时候掉链子，之前用 EM 就进过坑，而且 EM 活跃度已经很低了。所以想换一个，这时候我想，用 rust 做应该是一个不错的选择。但是 rust 似乎从 06 年就开始做了，现在连 1.0 还没有？跪了。。。&lt;/p&gt;

&lt;p&gt;好了，正好 go 1.3 出来，打算尝试一下。经过一天的学习，实现了 socks5 的基础版本，bug 非常少。goroutine 的使用也很简单，性能也超赞。好了，我不管大家怎么喷 go 的，我个人觉得 go 语言设计很不错，快速的上手，简洁的语法，很好的稳定性，有足够的理由让我去使用了。&lt;/p&gt;

&lt;p&gt;最后，瞎扯淡一段，&lt;/p&gt;

&lt;p&gt;Rust: go 你算老几，语法有我的优雅吗？
Go: 哦，是 rust 啊？你的 1.0 呢？
Rust: go 你还不是靠爹才发展起来的
Go: 你的 1.0 呢？
Rust：你的性能太搓了，我可以关闭 gc 运行，性能甩你几条大街
Go: 你的 1.0 呢？
Rust: 。。。咱能不提 1.0 吗？
Go: 1.0 都没有，那还说个毛线&lt;/p&gt;</description>
      <author>bluecoda</author>
      <pubDate>Mon, 30 Jun 2014 13:30:22 +0800</pubDate>
      <link>https://ruby-china.org/topics/20235</link>
      <guid>https://ruby-china.org/topics/20235</guid>
    </item>
  </channel>
</rss>
