位置:首页 > Ruby > 前端学习Ruby实战:唐诗项目部署与性能优化

前端学习Ruby实战:唐诗项目部署与性能优化

时间:2026-08-21  |  作者:星河游者  |  阅读:0

前言

本篇文章和 Ruby 关系不大,只是涉及到部署问题

前文花了不少时间从零到部署唐诗项目,当时因为篇幅问题留下了不少的坑

举例来说,我们可以用docker-compose来实现两个容器的互相访问,或者使用shell命令在本地进行部署。不过,本文并未对这些方法进行改造,毕竟传统部署Ruby on Rails存在明显的弊端,需要一定的运维经验。为了能快速部署Rails引用,我找到了fly.io。接下来,本文将以唐诗项目为例,向大家介绍如何将其部署到fly.io上。

回顾唐诗 API

  • 随机出现一首诗:/poetry/random
  • 用诗的题目查询:/poetry/title/静夜思
  • 列出这个诗人的所有诗:/poetry/author/李白
  • 列出这个诗人的这首诗:/poetry/author/张若虚/title/春江花月夜

如何启动

先将项目中的 tangpoetry.sql 导入到 postgresql 数据库。可以使用 pgAdmin 也可以使用命令行 psql 导入数据

rails s 启动项目

检查本地启动没问题后,开始部署项目

部署项目

官方 Rails 部署教程 已经写的很清楚了,可以按照上面的做一遍练练手

这里我们按照亲身体验 Fly.io 来手把手体验 Fly.io

安装 flyctl

安装方式可以参考官方文档:fly.io/docs/hands-…

因为笔者是 window,可运行以下命令安装

pwsh -Command "iwr https://fly.io/install.ps1 -useb | iex"
# 或者
powershell -Command "iwr https://fly.io/install.ps1 -useb | iex"

如果执行 flyctl version 不报错,就说明安装成功了

flyctl version
# flyctl.exe v0.1.32 windows/amd64 

注册 fly.io

如果这是您第一次使用 Fly.io,则需要注册一个帐户

fly auth signup

注册完之后,登录 fly.io

登录 fly.io

如果您已经拥有 Fly.io 帐户,则只需使用 flyctl 登录即可

fly auth login

启动应用程序

先进入我们的 tangpoetry API 项目,在命令行中敲入:

fly launch # 创建我们的应用

命令行会提示几个问题:

Creating app in D:workspacerubytangpoetry
Scanning source code
Detected a Rails app
 Choose an app name (lea ve blank to generate one): 
 Choose a region for deployment: Hong Kong, Hong Kong (hkg)
 Would you like to set up a Postgresql database now Yes
 Select configuration: Development - Single node, 1x shared CPU, 256MB RAM, 1GB disk
 Would you like to set up an Upstash Redis database now No
 Create .dockerignore from 1 .gitignore files No

这里的 app name 将来会是项目的名字,具有唯一性。后面是否创建 postgresql 数据库,笔者直接选择创建数据库,fly.io 创建完数据库后,给在界面上给出数据库的用户名密码等信息。Redis 不需要不用部署

当命令执行完毕,fly 会创建fly.tomlDockerfile 等文件

fly launch完成

我们不着急部署,先将数据库导入

数据库导入

上一步执行时已帮我们创建了数据库,文档中描述了如何连接fly postgres,具体可参考这里。这里有个需要注意的地方,起初使用psql postgres://{username}:{password}@{hostname}:{port}/{database}options这种方式连接fly数据库时,可能会连接不通。这是因为fly.io进行了限制,Fly Postgres的数据库处于内部网络,默认情况下不会公开,所以无法连接。我们可以分配ip地址,但这需要付费,每月2美元。

当你想分配公共的 ip 地址时:

fly ips allocate-v4 --app 
# Looks like you're accessing a paid feature. Dedicated IPv4 addresses now cost $2/mo. Are you ok with this

所以用外部连接的方式行不通,笔者这里采用的是fly proxy 将服务器端口转发到本地服务上

唐诗项目的执行如下:

fly proxy 5433 -a tangpoetry-db

因为本地已经开了 5432 的端口,故用 5433 代替

转发的终端就开着,另起一个终端来进行之后的命令

再通过 psql 连接就能通了

psql "postgres://postgres:@localhost:5433"

将根目录中的 tangpoetry.sql 导入到 fly postgres 数据库中,查看有数据后,我们进入 config/database.yml ,修改 production 的配置

production:
  <<: *default
  database: postgres
  username: postgres
  password: <%= ENV["DB_PASSWORD"] %>
  host: <%= ENV["DB_HOST"] %>

将数据库密码和主机写进 fly secrets 中

flyctl secrets set DB_PASSWORD=DB_PASSWORD
flyctl secrets set DB_PASSWORD=DB_HOST

部署

fly deploy # 部署

笔者这里没有用默认的 Dockerfile,因为就是跑不通,后来自己写了个 Dockerfile 才部署成功

访问:tangpoetry.fly.dev/poetry/rand… ,能访问成功了,我们成功了

别的有用的flyctl 命令

  • 创建 postgresql 数据库:fly pg create
  • 查看 postgresql 数据库列表: fly pg list
  • 通过 ssh 进入您的虚拟机:fly ssh console
  • 查看应用状态: flyctl status
  • 查看应用信息: flyctl info
  • 查看应用列表: flyctl apps list
  • 查看应用的IP: flyctl ips list
  • 销毁某个应用: flyctl apps destroy

总结

正所谓:别人笑我太疯癫,我笑他人看不穿。这个项目正是无语至极之作品

项目地址:github.com/johanazhu/t…

预览地址:tangpoetry.fly.dev/

参考资料

系列文章

《夸克》非常好用的免费AI浏览器

下载APP查看

免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。

相关文章

更多

精选合集

更多

大家都在玩

热门话题

大家都在看

更多