部署 用 render 免费部署第一个 rails 应用

suzulang · 2024年08月15日 · 最后由 MarkHoo 回复于 2024年08月24日 · 584 次阅读

背景介绍

最近在面向日企找工作的时候,线上面试遇到一个题目,需要部署一个 rails 应用到公网,让对方来进行 API 测试
题目很简单,写一个 CRUD 的 API,这是 rails 最擅长的,搭配最近比较火的 AI 编辑器cursor,10 分钟就搞定了,部署花了 3 小时都没搞定
想了 3 种方案进行部署到公网

  1. Heroku 部署计划
  2. Docker 部署计划
  3. Render 平台部署

结果是

  1. 需要海外信用卡,失败
  2. dockerhub 被封了,第一次部署,要配代理之类的,放弃
  3. render 部署,成功,不过花了很多时间踩坑

render 部署流程 4 步

  1. 创建 PostgreSQL 数据库
  2. 创建 bin/render-build.sh
  3. 创建 render.yaml
  4. 修改 config/database.yaml

创建 PostgreSQL 数据库

在这个网址里创建一个属于你的免费数据库https://dashboard.render.com/new/database

在这里填写数据库名称

其余的什么都不要填,下面的 Instance Type 选择 free

数据库就建好了

创建 bin/render-build.sh

#!/usr/bin/env bash
# exit on error
set -o errexit

bundle install
bundle exec rake assets:precompile
bundle exec rake assets:clean
bundle exec rake db:migrate

这里什么都不需要改!

创建 render.yaml

在根目录 下创建 render.yaml

databases:
  - name: render_deploy_test  # 把这里改成你刚才第1步创建的database的名字
    plan: free

services:
  - type: web
    plan: free
    name: render_deploy_test
    env: ruby
    buildCommand: "./bin/render-build.sh"
    startCommand: "bundle exec rails server"
    envVars:
      - key: DATABASE_URL
        fromDatabase:
          name: render_deploy_test # 把这里改成你刚才第1步创建的database的名字
          property: connectionString
      - key: RAILS_MASTER_KEY
        sync: false

修改 config/database.yaml

这里没有需要改的,直接复制下面的就行了

default: &default
  adapter: postgresql
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  timeout: 5000

development:
  <<: *default
  adapter: sqlite3
  database: db/development.sqlite3

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
  <<: *default
  database: db/test.sqlite3

production:
  <<: *default
  url: <%= ENV['DATABASE_URL'] %>

所有的准备工作都做完了

下面就把这个项目传到 github 上,这个具体就不展开说了,相信大家都有自己的习惯

我一般先在 github 上创建一个仓库,然后拉到本地,把.git 目录复制到我想要上传的项目目录里

最后一步

在这个网址里https://dashboard.render.com/blueprints,开始准备部署

跟着这个步骤,基本就可以免费部署一个简单的应用了

这是我部署的应用,速度比较慢,不过能在公网访问:https://render-deploy-test-1lnf.onrender.com/

github 地址:https://github.com/suzulang/render_deploy_test

欢迎反馈问题

练习不错,但是只有有几分钟或者几小时不活跃,服务就停了。不过我还有两三个也可以,用过也还可以,但是名字不好记忘了。用 AI 应该就能直接搜到

MarkHoo 回复

对的,难怪我昨天自己访问的时候,发现已经访问不了了

去 render 的 dashboard 里面看了一下,果然停掉了

作为新手,练习练习部署,感觉还不错

谢谢回复

suzulang 回复

如果是搞前端项目,我觉得 Netlify 不错,感觉响应比 CF 好,但他好像也用过了 CF 的服务。 总之就是可以从 Github 拉取过去持续部署,配置好命令就行了,而且是 24 小时在线,国内访问速度也很好,还可以绑定域名。我用 Hugo 大家的静态博客就是放在上面。先在本地配置好静态站点的所有信息,不管是用 Hugo 还是 Hexo,然后清理掉调试生成的文件,然后整个 push 到 Github,然后让他在 Netlify 部署的时候,用配置的命令生成页面。

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