Ruby 在阿里云函数计算上部署 Sinatra

wangjianxing · 2023年09月08日 · 878 次阅读

阿里云的函数计算是什么

  • 阿里云的函数计算类似于 aws 上的 lambda,按 CPU、内存、调用次数等等的使用量付费
  • 支持的部署方式:控制台、Serverless Devs、SDK
  • ruby 的话目前的话是通过 Custom Runtime 来支持,内置的 ruby 版本是 2.7

部署步骤(控制台方式)

  1. 阿里云函数计算 FC 控制台->服务及函数->创建服务
  2. 创建成功点击进入服务,开始创建函数

    选择 使用自定义运行时创建

    请求处理程序类型选择 处理 HTTP 请求

    运行环境选择 Ruby 自定义运行时 Debian 9

    代码上传方式选择 使用示例代码

    启动命令留空,我们用 bootstrap 启动,端口写 4567

    这样点击创建后,就跳转到函数的 web IDE(像 vscode) 里了

  3. Terminal 菜单上 new terminal

  4. 代码部分

bundle init 生成个 Gemfile

Gemfile 加上 sinatra,我试图用 gem sources 添加 ruby-china 的源,但 bundle install 没有成功,原因不明,所以直接把 Gemfile 里的 source 改了。

  # Gemfile
  # frozen_string_literal: true

source "https://gems.ruby-china.com"

git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }

ruby "2.7.0"

# gem "rails"
gem 'sinatra'
# gem 'puma'

接着开始 bundle install,非常重要,这里必须将用到的依赖库 gem 也一并打包了 (另一个方法就创建层,这样可以使用公用 gem,我没试过,这里就不说了)

bundle install --path vendor/bundle

安装完成后再建个 bootstrap 文件(注意:没有后缀名)用于启动,执行 chmod 755 bootstrap、chmod 777 bootstrap 或 chmod +x bootstrap 赋予文件的可执行权限。

# bootstrap
#!/bin/bash

bundle exec ruby server.rb -o 0.0.0.0 -e production

建完后,修改权限

chmod 755 bootstrap

再把 server.rb 文件改改

# server.rb
require 'sinatra'

get '/' do
  'Hello world!'
end

然后点击按钮 部署代码 就可以成功部署了

5、访问验证

最后再检查下函数的 触发器管理 有没有创建了 HTTP 类型的触发器,看看设置是否没问题。 这样就可以 访问触发器的公网访问地址,看看是否返回 hello world

curl https://sendxxx-service-fkhamynmsx.cn-guangzhou.fcapp.run

这样整个部署过程就完成了,一个 hello world 小服务就可以访问了。

注意要点

  • HTTP 触发器认证方式选择 无需认证
  • 如果要使用 HTTP 触发器的其他认证方式,签名验证没有官方 sdk,使用 JWT(gem 'jwt')会比较简单
  • 其他 ruby 版本目前我也不知道怎么弄
  • gem sources 设置无效,选择在 Gemfile 把源 直接 改成 gems.ruby-china.com
  • bootstrap 里记得加 -o 0.0.0.0 如果 host 不设置 0.0.0.0 的话,请求会超时,port 设置里也有说明;并且记得执行 chmod 755 bootstrap 赋予文件的可执行权限,否则会有权限问题
  • 每个函数是可以设置环境变量的

参考

暂无回复。
需要 登录 后方可回复, 如果你还没有账号请 注册新账号