在Heroku部署Sylius时路由异常问题求助
Sylius部署至Heroku后访问出现500错误的排查与解决
问题描述
尝试将Sylius部署至Heroku,多次尝试均未成功。Heroku活动日志显示部署完成,但访问应用URL时出现500异常(截图:
)。
相关访问日志:
2023-08-18T20:51:38.659916+00:00 heroku[router]: at=info method=GET path="/en_US/" host=creativedss-6e8e6463e6bc.herokuapp.com request_id=784e6ab0-8e79-4ac2-8dc3-7dbae6506bd6 fwd="110.174.122.237" dyno=web.1 connect=0ms service=23ms status=500 bytes=1204 protocol=https 2023-08-18T20:51:38.661457+00:00 app[web.1]: 10.1.43.231 - - [18/Aug/2023:20:51:38 +0000] "GET /en_US/ HTTP/1.1" 500 1027 "https://dashboard.heroku.com/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36
现有配置:
- Procfile内容:
web: heroku-php-nginx -C nginx_app.conf public/
- nginx_app.conf内容:
location / { # try to serve file directly, fallback to rewrite try_files $uri @rewriteapp; } location @rewriteapp { # rewrite all to index.php rewrite ^(.*)$ /index.php/$1 last; } location ~ ^/index\.php(/|$) { try_files @heroku-fcgi @heroku-fcgi; # ensure that /index.php isn't accessible directly, but only through a rewrite internal; }
排查思路与解决办法
1. 获取详细错误日志
当前日志仅显示500状态,无具体错误原因,需查看PHP/FPM的完整错误输出:
- 执行命令:
heroku logs --tail --app creativedss-6e8e6463e6bc,持续观察访问应用时的日志,定位具体错误(如数据库连接失败、缓存未生成、依赖缺失等)。
2. 校验环境变量配置
Sylius依赖大量环境变量,确保以下关键项正确设置:
DATABASE_URL:确认Heroku自动生成的数据库链接是否与Sylius配置兼容APP_ENV=prod、APP_DEBUG=0:生产环境需关闭调试模式APP_SECRET:必须手动配置,可通过本地执行php bin/console secrets:generate-keys生成后添加到Heroku环境变量- 邮件、存储等其他业务所需配置项
3. 确认部署后初始化命令已执行
Sylius生产环境部署需要执行初始化步骤,需确保这些命令自动运行:
- 数据库迁移:
php bin/console doctrine:migrations:migrate --no-interaction - 资产安装与编译:
php bin/console assets:install public --symlink、yarn install && yarn build(使用Webpack Encore时) - 缓存清理与预热:
php bin/console cache:clear --env=prod、php bin/console cache:warmup --env=prod
可在composer.json的scripts中添加自动执行脚本:
"scripts": { "post-install-cmd": [ "@auto-scripts", "php bin/console doctrine:migrations:migrate --no-interaction", "php bin/console assets:install public --symlink", "php bin/console cache:warmup --env=prod" ] }
4. 调整Nginx配置
当前Nginx配置的internal指令可能影响Sylius路由重写,尝试修改index.php相关配置块:
location ~ ^/index\.php(/|$) { try_files $uri $uri/ /index.php?$query_string; fastcgi_pass heroku-fcgi; fastcgi_split_path_info ^(.+\.php)(/.*)$; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; }
同时确认public/目录下的index.php文件存在且权限正常。
5. 验证生产环境依赖
执行命令确保依赖完整安装:
heroku run composer install --no-dev --optimize-autoloader --app creativedss-6e8e6463e6bc
内容的提问来源于stack exchange,提问作者ivantxo
相关产品推荐
相关产品推荐

