Rails应用已成功部署至Dokku Droplet但仍无法访问
从你的部署输出里能看到关键警告:
Detected IPv4 domain name with nginx proxy enabled. Ensure the default nginx site is removed before continuing.
这是导致问题的核心原因——默认nginx站点优先级高于Dokku生成的应用配置,所以访问IP时显示默认页,域名也因为nginx路由问题无法正常指向你的应用。以下是具体修复步骤:
1. 移除默认nginx站点
执行以下命令删除默认配置并重启nginx:
sudo rm /etc/nginx/sites-enabled/default sudo systemctl reload nginx
2. 验证域名DNS解析
确保你添加的域名playlist.creator的A记录已经正确指向Droplet的IP(178.128.157.11)。可以在本地终端用以下命令验证:
nslookup playlist.creator
如果解析结果不是你的Droplet IP,需要去域名服务商处修正DNS配置,等待生效(通常需要几分钟到几小时)。
3. 检查应用运行状态
确认Dokku上的应用进程正常启动:
# 查看进程状态 dokku ps:list playlistbuilder # 查看应用日志,排查启动错误 dokku logs playlistbuilder
如果日志里有数据库连接错误,检查Postgres链接是否正确(你执行了两次dokku postgres:link不会有问题,但可以用dokku config:show playlistbuilder确认DATABASE_URL是否存在)。
4. 确认Dokku域名配置
检查域名是否正确绑定到应用:
dokku domains:report playlistbuilder
输出里的Domains app domains应该包含playlist.creator,如果没有,重新执行dokku domains:add playlistbuilder playlist.creator后再推送一次代码。
5. 可选:添加Procfile明确启动命令
部署输出里提示没有Procfile,虽然Dokku会用默认启动命令,但显式指定可以避免潜在问题。在项目根目录创建Procfile文件,内容如下:
web: bundle exec puma -C config/puma.rb
然后重新推送代码:
git add Procfile git commit -m "Add Procfile for web server" git push dokku master
完成以上步骤后,重新访问域名或Droplet IP,应该就能正常打开你的Rails应用了。
内容的提问来源于stack exchange,提问作者Jillian Hoenig

