乐趣区

关于ruby:前端学-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 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 利用

系列文章

  • 前端学 Ruby:前言
  • 前端学 Ruby:装置 Ruby、Rails
  • 前端学 Ruby:相熟 Ruby 语法
  • 前端学 Ruby:相熟 Rails
  • 前端学 Ruby:唐诗 API 我的项目
退出移动版