前端学 Ruby:唐诗项目部署优化

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
简介: 前端学 Ruby:唐诗项目部署优化

前言

本篇文章和 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

安装方式可以参考官方文档:https://fly.io/docs/hands-on/install-flyctl/

因为笔者是 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:\workspace\ruby\tangpoetry
Scanning source code
Detected a Rails app
? Choose an app name (leave 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 <pg-app-name>
# 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:<password>@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 才部署成功

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

别的有用的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 <appname>

总结

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

项目地址:https://github.com/johanazhu/tangpoetry

预览地址:https://tangpoetry.fly.dev/

参考资料

  • 在 Fly.io 部署 Rails 应用
相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
6天前
|
缓存 前端开发 JavaScript
cnblogs——从主题开发浅谈前端性能优化
cnblogs——从主题开发浅谈前端性能优化
15 0
|
2天前
|
缓存 前端开发 JavaScript
优化前端性能的十大最佳实践
在现代网页开发中,前端性能优化不仅仅是为了提升用户体验,还能显著提高网站的加载速度和响应时间。本文探讨了十大最佳实践,从优化资源加载到减少网络请求,再到提高页面渲染效率,每个实践都旨在解决常见的性能瓶颈。通过实现这些策略,开发者可以显著提升前端性能,提升用户满意度,并确保网站在各种设备上的流畅运行。
|
2天前
|
缓存 前端开发 JavaScript
深入探讨前端性能优化:从理论到实践
在现代Web开发中,前端性能优化已成为提升用户体验的关键因素。本文将探讨前端性能优化的基本理论,并结合实际案例,深入分析如何通过优化代码、资源管理和用户交互,显著提升网站和应用的响应速度。我们将介绍从理论到实践的多种方法,包括资源压缩、异步加载、缓存机制及工具的使用,帮助开发者构建更加高效和用户友好的前端应用。
|
2天前
|
缓存 编解码 前端开发
优化Web应用性能的前端技巧:从加载时间到用户体验
在现代Web开发中,提升前端性能不仅仅是为了缩短页面加载时间,更是为了提供更流畅的用户体验。本文将探讨几种有效的前端优化技术,包括懒加载、代码拆分、资源压缩以及浏览器缓存策略。通过具体实例和最佳实践,读者将能够掌握如何系统地提高Web应用的响应速度,减少资源消耗,并最终改善用户的整体体验。
|
5天前
|
缓存 前端开发 JavaScript
前端性能优化方案
【8月更文挑战第15天】前端性能优化方案
11 2
|
9天前
|
缓存 前端开发 API
优化前端性能的最佳实践
在构建高效的前端应用时,性能优化是不可忽视的关键因素。本文将探讨一些实用的前端性能优化策略,包括资源的懒加载、合理的缓存策略、代码分割以及异步数据加载等方法。通过实施这些最佳实践,可以显著提升应用的响应速度和用户体验。
|
17天前
|
前端开发 JavaScript UED
现代Web开发中的前端性能优化策略
在当今高度竞争的Web开发环境中,优化前端性能至关重要。本文探讨了几种有效的前端性能优化策略,涵盖了代码优化、资源加载、网络请求以及用户体验的关键因素,帮助开发者在设计和实施项目时更加高效和可持续。
|
24天前
|
缓存 监控 前端开发
前端开发中的性能瓶颈分析与优化
【7月更文挑战第27天】前端开发中的性能优化是一个系统工程,需要从多个角度入手,综合运用多种策略。通过减少网络延迟、优化资源加载、优化DOM操作、优化JavaScript执行以及第三方服务优化等措施,可以显著提升前端应用的性能。同时,通过性能监控和调优工具的使用,可以持续监控和优化应用性能,确保用户获得流畅、高效的体验。
|
30天前
|
缓存 前端开发 JavaScript
现代Web开发中的前端性能优化策略
在当今快节奏的Web开发环境中,前端性能优化至关重要。本文探讨了一些实用的策略和技术,帮助开发人员提升网页加载速度和用户体验。
|
9天前
|
缓存 前端开发 JavaScript
优化前端性能:从渲染到加载的全方位策略
前端性能优化是提升用户体验的关键因素。本文探讨了从浏览器渲染到资源加载的各个方面,介绍了使用现代工具和技术的策略,包括减少关键渲染路径、优化资源加载和利用缓存。通过实施这些策略,可以显著提高页面响应速度,减少加载时间,提供更流畅的用户体验。