对于symfony资产

时间:2018-06-08 09:44:01

标签: php symfony docker nginx docker-compose

在SO中也存在类似的问题,但不是针对此特定问题。

工具:docker-compose 1.21.2; symfony 3.4; nginx 1.10.3

我有几个分离的容器("每个容器应该只有一个问题")。除了在浏览器中获取symfony(3.4)应用程序的资源外,一切都有效。 定义的路线有效,模板正确呈现,只有资产是问题。除了使用相同的设置,但在本地(没有容器)的开发机器中服务,没有问题。

有了卷,但我希望将它们用于制作,以便文档指出https://docs.docker.com/compose/production/#modify-your-compose-file-for-production您可能需要的更改:

  • 删除应用程序代码的任何卷绑定,以便代码保留在容器内且无法从外部更改

事实:

  • 在nginx容器日志内部报告404访问但没有错误。
  • 在php-symfony容器内,prod日志显示request.ERROR: Uncaught .... NotFoundException for "GET /css/main.css" at ...RouterListener.php {"exception": ".../NotFoundHttpException(code: 0) ... ResourceNotFoundException"} []
  • 之类的行
  • 在浏览器http://<host>:<port>/app_dev.php/css/main.css中检查dev nginx返回404.(我在外部设置了开发环境)
  • 在浏览器中检查路由器中的dev,示例http://<host>:<port>/app_dev.php/css出现Symfony异常页面找不到&#34; GET / css&#34; 的路由,但信息相同{{ 1}}
  • 修改容器ResourceNotFoundException > NotFoundHttpExceptionweb文件夹的访问权限没有任何区别。

相关部分 docker-compose.yml

chmod -R a+rwx .../web

相关部分 nginx.conf

version: "2"
services:
    site:
        ...
        working_dir:
            /var/www/html/site
    site_webserver:
        ...
        ports:
           - <port>:80
        depends_on:
           - site
        links:
           - site

3 个答案:

答案 0 :(得分:0)

你应该有现有的文件/var/www/html/site/web/css/main.css!你有吗?

Nginx配置不应将此请求/css/main.css传递给PHP代码。它应该只是将现有文件发送到浏览器。 我认为你有这个文件,但是在另一条路上。

你为它准备了正确的nginx配置,或者将资产文件放在/ var / www / html / site / web /目录中

答案 1 :(得分:0)

可以说更多但是:资产在php-fpm(symfony)容器中被阻止。

在容器的文件 www.conf (在我的情况下 /usr/local/etc/php-fpm.d/www.conf )中检查指令{{ 1}}并保持这样

security.limit_extensions

注意:我发现它评论为security.limit_extensions =

答案 2 :(得分:0)

您的主要问题是,nginx正在nginx容器中搜索资产文件。使用(app / console资产:install)安装资产后,它们将被复制到您的php(symfony)容器中。您必须将资产链接到容器之间。有一个答案可以解决:https://stackoverflow.com/a/44284993/6279901