将 Gaufrette 流包装器与 AsseticBundle 一起使用

Posted

技术标签:

【中文标题】将 Gaufrette 流包装器与 AsseticBundle 一起使用【英文标题】:Using Gaufrette Stream Wrappers with AsseticBundle 【发布时间】:2014-08-07 09:09:31 【问题描述】:

我正在尝试使用 Gaufrette Stream Wrapper 来告诉 AsseticBundle 将项目资产转储到哪里,但我无法让它识别它们。

这就是我的 config_dev.yml 的 knp_gaufrette 部分的样子:

knp_gaufrette:
    adapters:
        dev_adapter:
            local:
                directory: /vagrant/test
                create: true

    filesystems:
        dev_adapter:
            adapter: dev_adapter

    stream_wrapper: ~

我使用一个简单的操作测试了包装器,以确保它已正确注册,并且工作正常:

public function thanksAction()

    file_put_contents('gaufrette://dev_adapter/test.txt', "ABC\n", FILE_APPEND);

    return new Response(file_get_contents('gaufrette://dev_adapter/test.txt'));

然后我像这样设置资产包配置(也在 config_dev.yml 中):

assetic:
    read_from: gaufrette://dev_adapter
    write_to: gaufrette://dev_adapter

但是,当我尝试使用 console assetic:dump --env=dev 转储资产时,我收到此错误:

Dumping all dev assets.
Debug mode is on.

10:53:28 [dir+] gaufrette://dev_adapter/css



  [RuntimeException]                                      
  Unable to create directory gaufrette://dev_adapter/css  



assetic:dump [--watch] [--force] [--period="..."] [write_to]

更多信息:

symfony/symfony:2.5.0 symfony/assetic-bundle: 2.3.0 knplabs/knp-gaufrette-bundle:0.1.7

【问题讨论】:

您解决了这个问题吗? 在我的情况下它会弹出,因为assetic:dump 命令无法创建目录(php 中的mkdir())。我正在使用包装器将文件上传到不支持目录的对象存储(OpenStack swift)。目前不知道如何解决这个问题:( 也许您可以尝试使用 -vvv 选项重新运行相同的命令,以增加错误消息的详细程度。 【参考方案1】:

我在连接 Amazon S3 流包装器时遇到了同样的问题。

我的最终解决方案是注释掉对 mkdir() 的调用并检查它的返回值 Assetic 的 DumpCommand。

private function doDump(AssetInterface $asset, OutputInterface $stdout)

    // ...

    //if (false === @mkdir($dir, 0777, true)) 
    //    throw new \RuntimeException('Unable to create directory '.$dir);
    //

    // ...

如果您使用依赖管理器,请将命令复制到新的命令类中,注释掉必要的行。

我认为路径中不存在的任何目录/资源都是自动创建的。

示例: 目录有一个空的assets 文件夹。 推送到s3://bucket-name/assets/css/style.css 将创建css 文件夹和style.css 文件。

【讨论】:

以上是关于将 Gaufrette 流包装器与 AsseticBundle 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

对象包装器与自动装箱

如何将 Shaka 打包器与 python 子进程调用一起使用?我收到此错误无效的流描述符名称/值对:

使用 Java Long 包装器与原始 long 相加数字

Assetic - 路线“_assetic_001d5b7_0”不存在

具有定制包装类型的柴油

如何让 Assetic + sass 在 Windows 中与 Symfony2 一起工作?