将 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 子进程调用一起使用?我收到此错误无效的流描述符名称/值对: