<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>wangjianxing</title>
    <link>https://ruby-china.org/wangjianxing</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>使用线程还是不使用线程：深入了解 Ruby 的执行模型</title>
      <description>&lt;p&gt;&lt;a href="https://shopify.engineering/ruby-execution-models" rel="nofollow" target="_blank"&gt;https://shopify.engineering/ruby-execution-models&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;本文由谷歌翻译机翻&lt;/p&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/wangjianxing/3da1c651-43a8-4c62-8533-01e2e4d35cb2.jpg!large" title="" alt=""&gt;&lt;/p&gt;</description>
      <author>wangjianxing</author>
      <pubDate>Mon, 25 Sep 2023 08:05:57 +0800</pubDate>
      <link>https://ruby-china.org/topics/43353</link>
      <guid>https://ruby-china.org/topics/43353</guid>
    </item>
    <item>
      <title>在阿里云函数计算上部署 Sinatra</title>
      <description>&lt;h2 id="阿里云的函数计算是什么"&gt;阿里云的函数计算是什么&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;阿里云的函数计算类似于 aws 上的 lambda，按 CPU、内存、调用次数等等的使用量付费&lt;/li&gt;
&lt;li&gt;支持的部署方式：控制台、Serverless Devs、SDK&lt;/li&gt;
&lt;li&gt;ruby 的话目前的话是通过 Custom Runtime 来支持，内置的 ruby 版本是 2.7&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="部署步骤（控制台方式）"&gt;部署步骤（控制台方式）&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;阿里云函数计算 FC 控制台-&amp;gt;服务及函数-&amp;gt;创建服务&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;创建成功点击进入服务，开始创建函数&lt;/p&gt;

&lt;p&gt;选择 &lt;em&gt;使用自定义运行时创建&lt;/em&gt;，&lt;/p&gt;

&lt;p&gt;请求处理程序类型选择 &lt;em&gt;处理 HTTP 请求&lt;/em&gt;，&lt;/p&gt;

&lt;p&gt;运行环境选择 &lt;em&gt;Ruby 自定义运行时 Debian 9&lt;/em&gt;，&lt;/p&gt;

&lt;p&gt;代码上传方式选择 &lt;em&gt;使用示例代码&lt;/em&gt;，&lt;/p&gt;

&lt;p&gt;启动命令留空，我们用 bootstrap 启动，端口写 &lt;em&gt;4567&lt;/em&gt;，&lt;/p&gt;

&lt;p&gt;这样点击创建后，就跳转到函数的 web IDE(像 vscode) 里了&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Terminal 菜单上 new terminal&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;代码部分&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;bundle init&lt;/code&gt; 生成个 Gemfile&lt;/p&gt;

&lt;p&gt;Gemfile 加上 sinatra，我试图用 gem sources 添加 ruby-china 的源，但 bundle install 没有成功，原因不明，所以直接把 Gemfile 里的 source 改了。&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;  &lt;span class="c1"&gt;# Gemfile&lt;/span&gt;
  &lt;span class="c1"&gt;# frozen_string_literal: true&lt;/span&gt;

&lt;span class="n"&gt;source&lt;/span&gt; &lt;span class="s2"&gt;"https://gems.ruby-china.com"&lt;/span&gt;

&lt;span class="n"&gt;git_source&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:github&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;repo_name&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="s2"&gt;"https://github.com/&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;repo_name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;ruby&lt;/span&gt; &lt;span class="s2"&gt;"2.7.0"&lt;/span&gt;

&lt;span class="c1"&gt;# gem "rails"&lt;/span&gt;
&lt;span class="n"&gt;gem&lt;/span&gt; &lt;span class="s1"&gt;'sinatra'&lt;/span&gt;
&lt;span class="c1"&gt;# gem 'puma'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;接着开始 bundle install，非常重要，这里必须将用到的依赖库 gem 也一并打包了 (另一个方法就创建层，这样可以使用公用 gem，我没试过，这里就不说了)&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;bundle&lt;/span&gt; &lt;span class="n"&gt;install&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt; &lt;span class="n"&gt;vendor&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;bundle&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;安装完成后再建个 bootstrap 文件（注意：没有后缀名）用于启动，执行 chmod 755 bootstrap、chmod 777 bootstrap 或 chmod +x bootstrap 赋予文件的可执行权限。&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# bootstrap&lt;/span&gt;
&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;

bundle &lt;span class="nb"&gt;exec &lt;/span&gt;ruby server.rb &lt;span class="nt"&gt;-o&lt;/span&gt; 0.0.0.0 &lt;span class="nt"&gt;-e&lt;/span&gt; production

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;建完后，修改权限&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;chmod&lt;/span&gt; &lt;span class="mi"&gt;755&lt;/span&gt; &lt;span class="n"&gt;bootstrap&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;再把 server.rb 文件改改&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;# server.rb&lt;/span&gt;
&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'sinatra'&lt;/span&gt;

&lt;span class="n"&gt;get&lt;/span&gt; &lt;span class="s1"&gt;'/'&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="s1"&gt;'Hello world!'&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后点击按钮 &lt;em&gt;部署代码&lt;/em&gt; 就可以成功部署了&lt;/p&gt;

&lt;p&gt;5、访问验证&lt;/p&gt;

&lt;p&gt;最后再检查下函数的 &lt;em&gt;触发器管理&lt;/em&gt; 有没有创建了 HTTP 类型的触发器，看看设置是否没问题。
这样就可以 访问触发器的公网访问地址，看看是否返回 hello world&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;curl&lt;/span&gt; &lt;span class="n"&gt;https&lt;/span&gt;&lt;span class="ss"&gt;:/&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;sendxxx&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;service&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;fkhamynmsx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;cn&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;guangzhou&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fcapp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这样整个部署过程就完成了，一个 hello world 小服务就可以访问了。&lt;/p&gt;
&lt;h2 id="注意要点"&gt;注意要点&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;HTTP 触发器认证方式选择 &lt;em&gt;无需认证&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;如果要使用 HTTP 触发器的其他认证方式，签名验证没有官方 sdk，使用 JWT（gem 'jwt'）会比较简单&lt;/li&gt;
&lt;li&gt;其他 ruby 版本目前我也不知道怎么弄&lt;/li&gt;
&lt;li&gt;gem sources 设置无效，选择在 Gemfile 把源 直接 改成 gems.ruby-china.com&lt;/li&gt;
&lt;li&gt;bootstrap 里记得加 -o 0.0.0.0 如果 host 不设置 0.0.0.0 的话，请求会超时，port 设置里也有说明；并且记得执行 chmod 755 bootstrap 赋予文件的可执行权限，否则会有权限问题&lt;/li&gt;
&lt;li&gt;每个函数是可以设置环境变量的&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="参考"&gt;参考&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://qiita.com/poruruba/items/004db74b8d9942a248df" rel="nofollow" target="_blank"&gt;https://qiita.com/poruruba/items/004db74b8d9942a248df&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/jwt/ruby-jwt" rel="nofollow" target="_blank"&gt;https://github.com/jwt/ruby-jwt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://help.aliyun.com/zh/fc/user-guide/configure-jwt-authentication-for-an-http-trigger" rel="nofollow" target="_blank"&gt;https://help.aliyun.com/zh/fc/user-guide/configure-jwt-authentication-for-an-http-trigger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://stackoverflow.com/questions/67695411/storing-pem-and-key-files-as-strings-in-database" rel="nofollow" target="_blank"&gt;https://stackoverflow.com/questions/67695411/storing-pem-and-key-files-as-strings-in-database&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://help.aliyun.com/zh/fc/product-overview/?spm=a2c4g.11174283.0.0.11bc11528wt7qZ" rel="nofollow" target="_blank"&gt;https://help.aliyun.com/zh/fc/product-overview/?spm=a2c4g.11174283.0.0.11bc11528wt7qZ&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/wangjianxing/bce1ca4f-6b09-451b-a7c9-5c1a7fc87723.png!large" title="" alt=""&gt;&lt;/p&gt;</description>
      <author>wangjianxing</author>
      <pubDate>Fri, 08 Sep 2023 21:38:20 +0800</pubDate>
      <link>https://ruby-china.org/topics/43321</link>
      <guid>https://ruby-china.org/topics/43321</guid>
    </item>
    <item>
      <title>三五个人是否可以开始搞一家类似 fly.io 或 koyeb.com 这样的公司</title>
      <description>&lt;h3 id="国内应该要搞家这样的公司"&gt;国内应该要搞家这样的公司&lt;/h3&gt;
&lt;p&gt;感觉他们的部署方式非常棒，scale 的问题，也可以轻松解决，对于很多中小型的开发团队来说，感觉也不错，可以专注于业务功能的开发，&lt;strong&gt;国内应该要搞家这样的公司&lt;/strong&gt;，国内服务器的话，把备案对接好是另一个附加问题。&lt;/p&gt;

&lt;p&gt;fly.io 我看他们 C 轮刚刚融了 7000 万美元，人员上也更多，但是 koyeb 看上去就是那种三五个人六七条枪的公司噢，我看这几年冒出来好多这样的类似 heroku 的公司噢，其实这样的公司对未来的想象力还蛮大的，尤其国内市场这么大，说不定未来可以和各种云斗一斗😄。&lt;/p&gt;
&lt;h3 id="他们的基础技术应该都差不多吧："&gt;他们的基础技术应该都差不多吧：&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://fly.io/docs/reference/architecture/" rel="nofollow" target="_blank"&gt;https://fly.io/docs/reference/architecture/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://fly.io/docs/about/open-source/" rel="nofollow" target="_blank"&gt;https://fly.io/docs/about/open-source/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.koyeb.com/blog/the-koyeb-serverless-engine-from-kubernetes-to-nomad-firecracker-and-kuma" rel="nofollow" target="_blank"&gt;https://www.koyeb.com/blog/the-koyeb-serverless-engine-from-kubernetes-to-nomad-firecracker-and-kuma&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <author>wangjianxing</author>
      <pubDate>Fri, 08 Sep 2023 15:08:04 +0800</pubDate>
      <link>https://ruby-china.org/topics/43317</link>
      <guid>https://ruby-china.org/topics/43317</guid>
    </item>
    <item>
      <title>(已删)</title>
      <description>&lt;p&gt;已删&lt;/p&gt;</description>
      <author>wangjianxing</author>
      <pubDate>Sun, 12 Jul 2020 18:28:57 +0800</pubDate>
      <link>https://ruby-china.org/topics/40139</link>
      <guid>https://ruby-china.org/topics/40139</guid>
    </item>
  </channel>
</rss>
