在浏览器中运行Ruby

Ruby快速起步 案例是终端运行ruby脚本,但是ruby的灵活性和表现力导致David Heinemeier Hansson(通常简称为"DHH")开发了 Ruby on Rails 框架在浏览器中运行ruby。此外,简单的ruby程序,也可以通过 Sinatra 微框架来完成,这里的案例我主要是实践一遍了解流程概况(从github推送到heroku)。

安装微框架

  • 创建gem安装配置,去除文档安装部分:

创建 ~/.gemrc
echo "gem: --no-document" >> ~/.gemrc
  • 安装需要的 gem

安装需要的gems
gem install sinatra
gem install rackup
gem install puma

hello_app.rb

  • hello_app.rb 包含最简单的如下内容

最简单的hello
require 'sinatra'
get '/' do
  'Hello world!'
end
  • 然后执行运行命令

运行
ruby hello_app.rb

终端输出信息:

运行输出信息
/home/admin/.rvm/gems/ruby-3.3.4/gems/sinatra-4.0.0/lib/sinatra/base.rb:1849: warning: Rack::Logger is deprecated and will be removed in Rack 3.2.
== Sinatra (v4.0.0) has taken the stage on 4567 for development with backup from Puma
Puma starting in single mode...
* Puma version: 6.4.2 (ruby 3.3.4-p94) ("The Eagle of Durango")
*  Min threads: 0
*  Max threads: 5
*  Environment: development
*          PID: 44955
* Listening on http://127.0.0.1:4567
* Listening on http://[::1]:4567
Use Ctrl-C to stop

此时访问本地回环地址 4567 端口,就可以看到浏览器输出内容 hello, world!

部署到Heroku

备注

heroku官网 注册账号,并且提交了支付方式(似乎不能使用国内信用卡)之后才能创建应用

警告

我没有搞定heroku的信用卡支付功能,所以实际上没有完成这步部署。不过,我整理记录了一下,理解了这个部署:

  • heroku 会根据你本地仓库的git配置来完成heroku的应用创建

  • 完成应用创建后,heroku就会和你git仓库绑定,自动从git仓库下载源代码,并完成持续部署(只要仓库变动就自动完成部署)

我自己也能够部署 GitLab 来完成这个流程,自己部署更有乐趣

  • 首先安装 Heroku CLI

  • 执行heroku应用创建:

创建heroku应用
heroku create
  • 在项目目录下创建一个 config.ru 配置,包含以下内容:

heroku 配置 config.ru
require './hello_app'
run Sinatra::Application
  • 配置一个Gemfile列出需要的gem组件:

创建Genfile列出需要的组件,类似于Python的 requirements.txt
source 'https://rubygems.org'

ruby '3.3.4'

gem 'sinatra'
gem 'puma'
  • 现在需要使用 bundler 打包然后推送:

使用 bundler 打包并推送仓库
gem install bundler
bundle install

# 这里会生成一个锁定文件 Gemfile.lcok,内容是根据Gemfile生成的详细配置
bundle lock --add-platform x86_64-linux

git add -A
git commit -m "Add deployment configuration"

# 这条命令似乎有问题,待以后实践
git push heroku main

参考