我有 Rails 7.1,并在 DigitalOcean 上创建了一个一键式 Droplet,其中预装了 Dokku。
我现在正在尝试将 Rails 应用程序部署到生产环境,但部署处理停止在 remote: #13 45.25 Installing date 3.3.4 with native extensions:
它已经挂在那里 20 分钟了,而且还在计数。
这是我用来部署应用程序的第二个 Droplet。对于第一个(前一个),我遇到了同样的问题。这个过程持续了一个多小时,没有任何进展,所以我终止了它。
哪里可能有问题?我看不到任何错误日志来进一步调查它。有什么建议吗?
看来问题出在服务器配置上。我使用
1 CPU, 1 GB Memory and 25 GB
创建了一个 Droplet,并将 Droplet 升级为 1 CPU, 2 GB Memory and 50 GB
并且部署成功。
您的服务器可能没有足够的内存来实际完成本机扩展的编译。在编译 C 扩展(许多语言都这样做)或构建基于 Node.js 的应用程序时,这种情况相当常见。该问题将表现为部署速度非常慢(服务器分页到磁盘)或由于服务器内存不足而导致进程被终止。 解决方法是:
添加交换
):
sudo install -o root -g root -m 0600 /dev/null /swapfile
dd if=/dev/zero of=/swapfile bs=1k count=2048k
mkswap /swapfile
swapon /swapfile
echo "/swapfile swap swap auto 0 0" | sudo tee -a /etc/fstab
sudo sysctl -w vm.swappiness=10
echo vm.swappiness = 10 | sudo tee -a /etc/sysctl.conf
Dokku还支持直接部署docker镜像。应用程序可以在 CI 中构建 - 例如,使用官方Github Action
- 然后通过 git:from-image
命令(
来自文档)进行部署。请注意,这需要远程 docker 注册表才能工作。
# replace $APP, $REGISTRY, and $IMAGE_SHA as appropriate
dokku git:from-image $APP $REGISTRY/$APP@sha256:$IMAGE_SHA
部署映像允许您将应用程序构建卸载到已经为您运行 CI 的任何地方,从而减少部署期间所需的计算。它还可以帮助您更快地进行部署,因为 CI 服务器通常比您通过托管提供商提供的虚拟机更大/更快。