Symfony、Liip Imagine 捆绑包无法在产品环境中的服务器上工作

问题描述 投票:0回答:2

我有一个项目,我将上传的图像保存在 src/My/Bundle/Resources/uploads/images/full 中,并使用树枝过滤器

imagine_filter
动态创建缩略图。

在我的本地计算机上它可以完美地工作,在我的服务器上也是如此,但仅在开发环境下。当我删除以前创建的缩略图(仅保留 full 目录)、清除产品缓存并加载任何网页时,不会创建图像,它们的 url 始终保留在 media/cache 下,并且记录器为我提供

request.ERROR

"No route found for "GET /uploads/images/avatar/354026c94b773b77ca945b4a6323e15c84102f6b.jpg"" at /<path>/app/cache/prod/classes.php line 1964 {"exception":"[object] (Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException: No route found for \"GET /uploads/images/avatar/354026c94b773b77ca945b4a6323e15c84102f6b.jpg\" at /<path>/app/cache/prod/classes.php:1964, Symfony\\Component\\Routing\\Exception\\ResourceNotFoundException:  at /<path>/app/cache/prod/appProdUrlMatcher.php:1816

一些附加信息:

  • 我已将 src/My/Bundle/Resources/uploads 符号链接到 web/uploads
  • 我的配置是(
    thumbnail_min
    是自定义过滤器):
    
    liip_imagine:
        loaders:
            default:
                filesystem:
                    data_root: %kernel.root_dir%/../web/uploads/images/full
        resolvers:
            default:
                web_path: 
                    web_root: %kernel.root_dir%/../web
                    cache_prefix: /uploads/images
        cache: default
        filter_sets:
            avatar:
                quality: 90
                filters:
                    thumbnail_min: { size: 50, mode: inset }
            ....
            full:
                quality: 100
    
  • 权限始终至少为 rw 组(这是服务器上需要的)
symfony production-environment liipimaginebundle
2个回答
0
投票

刚刚在我的本地计算机上遇到了类似的问题,但仍在开发环境中。

对我来说,我缺少默认媒体/缓存文件夹的组可写权限,该文件夹在 liip:imagine:cache:remove 和页面重新加载后保持为空。因此图像链接到空文件夹。

为了解决这个问题,我首先确保 Group 设置为 Apache 的 _www (mac) / www-data (linux),例如

  • sudo chgrp -R www-数据网络/媒体/缓存

然后确保该文件夹设置为可读、可写和可执行,例如

  • sudo chmod -R g+rwx 网络/媒体/缓存

希望这有帮助...


0
投票

我通过从 nginx.conf 中删除此块解决了这个问题:

location ~* \.(css|js|jpg|jpeg|png|gif|ico|woff|woff2|ttf|svg)$ {
    try_files $uri =404;
    expires 1h;
    add_header Cache-Control "public";
}

try_files 块使 Nginx 过于严格,因此如果它没有立即找到文件(如 CSS、JS、图像等),它只会返回 404。

LiipImagineBundle 需要在第一次请求时生成图像,然后缓存它们。但由于 try_files $uri =404;行,Nginx 不允许 Symfony 处理丢失的图像请求,因此无法生成它们;通过删除该行,nginx 现在将这些请求传递给 Symfony,让解析器根据需要创建和缓存图像。

© www.soinside.com 2019 - 2024. All rights reserved.