我试图使用LiipImagineBundle
的S3缓存解析器将我缓存的缩略图上传到S3,但我遇到了一些奇怪的问题。
我正在使用AWS SDK v ^3.2:
"aws/aws-sdk-php": "^3.2",
我正在使用Symfony2和在我的services.yml
中,我已经配置了Aws'Credentials'Credentials
类和Aws'S3'S3Client
,使用它来创建客户端:
shq.amazon.s3Credentials:
class: Aws'Credentials'Credentials
arguments: ["%amazon.s3.key%", "%amazon.s3.secret%"]
shq.amazon.s3:
class: Aws'S3'S3Client
arguments:
- version: %amazon.s3.version%
region: %amazon.s3.region%
credentials: "@shq.amazon.s3Credentials"
一切正常,我可以上传文件到S3。
现在,LiipImagineBundle
的配置:似乎LiipImagineBundle
的配置规则仅适用于AWS SDK 2,并且使用aws_s3
缓存解析器会导致"误报"。
我已经尝试了至少三种不同的配置。
配置1:FOR AWS SDK 2
liip_imagine:
resolvers:
default:
web_path: ~
cache_s3:
aws_s3:
client_config:
key: %amazon.s3.key%
secret: %amazon.s3.secret%
region: %amazon.s3.region%
version: %amazon.s3.version%
bucket: %amazon.s3.bucket%
get_options:
Scheme: 'https'
put_options:
CacheControl: 'max-age=86400'
cache: cache_s3
filter_sets:
thumb_purchase:
filters:
thumbnail: { size: [250, 250], mode: outbound }
interlace:
mode: line
抛出一个异常:
在呈现模板期间抛出异常从实例配置文件元数据检索凭据时出错服务器。cURL错误28:1006毫秒后连接超时(见http://curl.haxx.se/libcurl/c/libcurl-errors.html)) insrc/AppBundle/资源/视图/商店/show.html。第135行。
这是由AWS SDK在搜索凭证时抛出的,但是没有找到它们。
所以,这种方法似乎不起作用。
配置2:使用Aws'Credentials
(AWS SDK 3)
将凭据传递给S3Client
的方式是传递Aws'Credentials
的实例。我通过一个服务来做到这一点,这样我就可以在其他服务中重用相同的凭据(当我使用它将文件上传到S3时,这是有效的!):
shq.amazon.s3Credentials:
class: Aws'Credentials'Credentials
arguments: ["%amazon.s3.key%", "%amazon.s3.secret%"]
和config.yml
中的:
liip_imagine:
resolvers:
cache_thumb_purchase:
aws_s3:
client_config:
version: %amazon.s3.version%
region: %amazon.s3.region%
credentials: "@shq.amazon.s3Credentials"
bucket: %amazon.s3.bucket%
get_options:
Scheme: 'https'
put_options:
CacheControl: 'max-age=86400'
filter_sets:
thumb_purchase:
cache: cache_thumb_purchase
filters:
thumbnail: { size: [250, 250], mode: outbound } # Transforms 50x40 to 32x26, no cropping
interlace:
# mode can be one of none,line,plane,partition
mode: line
如您所见,我将Credentials
服务传递给LiipImagineBundle
,但我从Aws'ClientResolver
获得此错误:
ClientResolver.php第296行InvalidArgumentException:为"凭据"提供的配置值无效。预期的Aws'Credentials'CredentialsInterface|array|bool|可调用,但得到字符串'@shq.amazon。s3Credentials ' <我>(长度= 25)我>
凭证:凭证(Aws ' ' CredentialsInterface | |数组bool |可调用)
指定用于签署请求的凭据。提供一个Aws'Credentials'CredentialsInterface对象,"key"的关联数组,"secret"和可选的"token"密钥,
false
使用null凭据,或一个可调用的凭据提供程序,用于创建凭据或返回null。有关内置凭据的列表,请参阅Aws'Credentials'CredentialProvider提供者。如果没有提供凭据,SDK将尝试加载它们来自环境。
似乎没有传递@shq.amazon.s3Credentials
引用的类Credentials
,而是简单地传递字符串@shq.amazon.s3Credentials
,因此ClientResolver
正确地报告传递的参数是不正确的。
所以,这个配置也不能工作。
配置3:PASSING AN ARRAY TO S3Client
(AWS SDK 3)
实例化S3Client
的第三种方法是传递一个关联数组来硬编码凭证。
所以我尝试了这个配置:
liip_imagine:
resolvers:
cache_thumb_purchase:
aws_s3:
client_config:
version: %amazon.s3.version%
region: %amazon.s3.region%
#credentials: "@shq.amazon.s3Credentials"
credentials:
key: %amazon.s3.key%
secret: %amazon.s3.secret%
...
但是这次我收到LiipImagineBundle
的错误,似乎不接受数组作为参数:
ScalarNode.php第36行InvalidTypeException:路径类型无效"liip_imagine.resolvers.cache_thumb_purchase.aws_s3.client_config.HERE_THERE_IS_DIRECTLY_MY_AWS_KEY"。
我认为包的配置规则必须更新,但我不知道如何做到这一点,因为我还没有对这样的事情很有信心。
那么,我如何使LiipImagineBundle
/Symfony传递类而不是引用Credentials
类的字符串?是我的错,还是LiipImagineBundle
坏了?
(也,奇怪的事情,我不明白,而不是在路径中使用术语"键",它使用"键"的值是HERE_THERE_IS_DIRECTLY_MY_AWS_KEY
。所以它报告一个路径像这样的liip_imagine.resolvers.cache_thumb_purchase.aws_s3.client_config.HERE_THERE_IS_DIRECTLY_MY_AWS_KEY
而不是路径像liip_imagine.resolvers.cache_thumb_purchase.aws_s3.client_config.key
-这对我来说似乎更正确,不是吗?
你试过吗?
liip_imagine:
resolvers:
cache_thumb_purchase:
aws_s3:
client_config:
credentials:
key: %amazon.s3.key%
secret: %amazon.s3.secret%
version: %amazon.s3.version%
region: %amazon.s3.region%
bucket: %amazon.s3.bucket%
get_options:
Scheme: 'https'
put_options:
CacheControl: 'max-age=86400'
filter_sets:
thumb_purchase:
cache: cache_thumb_purchase
filters:
thumbnail: { size: [250, 250], mode: outbound } # Transforms 50x40 to 32x26, no cropping
interlace:
# mode can be one of none,line,plane,partition
mode: line
services:
admin.amazon.s3:
class: Aws'S3'S3Client
factory_class: Aws'S3'S3Client
factory_method: 'factory'
arguments:
- key: %amazon.s3.key%
secret: %amazon.s3.secret%
region: %amazon.s3.region%
version: %amazon.s3.version%
我现在开始做这个LiipImagineBundle
+ KnpGaufretteBundle
+ "aws/aws-sdk-php": "^3.18"