如何使用Docker在Render.com上部署开发的Rails应用程序

我想用Docker发布开发的应用程序。
我想用Rails + PostgreSQL发布应用程序。
但是,我不知道该怎么做。

這篇文章是為那些人準備的。

我自己发布了一个Rails应用,花了一整天时间,非常辛苦。不过,最终结果是“一切都能够克服”,所以我会和大家分享。

※假设您已经创建了Render.com的账户。

修改Dockerfile、compose.yaml和entrypoint.sh文件

由于每个人的情况不同,所以这可能不会对大家有太大参考价值。
不过,我还是决定将其放在这里。

坦白说,我非常参考以下的文章,所以希望你能阅读以下的文章↓。

 

我之前在MariaDB上使用了数据库,所以迁移到PostgreSQL很困难。
嗯,如果你和我使用相同环境,可能下面的代码复制粘贴就能运行。

FROM ruby:3.2.2
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs vim
RUN mkdir /myapp
WORKDIR /myapp
ADD Gemfile /myapp/Gemfile
ADD Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
ADD . /myapp
COPY . .
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000

CMD [ "rails","server","-b","0.0.0.0" ]
version: '3'
services:
  db:
    image: postgres
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: password
    volumes:
      - postgres_volume:/var/lib/postgresql/data
    restart: always
  web:
    build: .
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: password
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    restart: always
    tty: true
    stdin_open: true
    depends_on:
      - db
volumes:
  postgres_volume:

最好将entrypoint.sh脚本放在与Dockerfile相同的目录中。

#!/bin/bash
set -e

# Remove a potentially pre-existing server.pid for Rails.
rm -f /myapp/tmp/pids/server.pid

# Then exec the container's main process (what's set as CMD in the Dockerfile).
bundle install
bundle exec rake assets:precompile
bundle exec rake assets:clean
bundle exec rake db:migrate

exec "$@"

我觉得这样写就可以了。(可能因为我的环境不同所以可能会出错,但是我会定期自定义的!!)

部署方法分为2步骤。

首先创建PostgreSQL。

请你制作一个带图片的关于PostgreSQL和Web服务的文章,并请回来笑哈哈↓因为这样的文章更易于理解。

 

下面是创建方法的简单说明:
1. 从”新建”按钮开始创建PostgreSQL。
2. 输入以下项目。

    • Name

 

    • Database

 

    • User

 

    • Region

 

    PostgreSQL Version

3、点击“创建数据库”按钮。
4、复制“内部数据库URL”并保存。

接下来制作一个Web服务

你最好看一下这篇文章,可以点击下面的链接?
https://ph-1ab.com/render-deploy-with-own-domain/#toc1

1. 从新按钮中选择Web Service。
2. 选择要创建的仓库。
3. 输入以下项目。

    • Name

 

    • Region

 

    • Branch

 

    • Runtime

 

    • Environment Variables

 

    • ここで、環境変数(左側)をDATABASE_URLにして先ほどコピーしたInternal Database URLを貼り付ける。

 

    DockerfilePath

点击“创建服务”
部署完成!(若出现错误,查看日志和消息进行修正)

我遇到的錯誤解決方法。

主机访问被拒绝,出现错误。

如果出现了这样的错误信息,我们可以通过添加以下代码来解决:
在config/application.rb文件中添加以下代码。

class Application < Rails::Application
    ...
    config.hosts << "(リンク先)" # 追加
    ...
end

在连接中,不需要包含”https://”。

我整理一下

哎呀~意外地容易吧?
我花了一天以上的时间,觉得很辛苦呢。

不清楚大家部署的原因,但如果这篇文章对大家有所帮助,我将感到非常幸福!

有用的文章(非常感谢)
与文件相关的代码↓

 

以简单易懂的图片方式介绍了在 Render.com 上部署的方法↓

 

广告
将在 10 秒后关闭
bannerAds