如何使用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 上部署的方法↓