gpt4 book ai didi

amazon-s3 - 将 Symfony2 Assets 转储到 Amazon S3

转载 作者:行者123 更新时间:2023-12-02 19:44:06 24 4
gpt4 key购买 nike

在 Symfony 2 中使用 capifony 进行部署后,我想将我的 Assets 转储到生产中的 s3 存储桶。我找到了一些解决方案,但并没有真正找到最好使用的解决方案。

可以使用 Zend_Service_Amazon_S3 转储资源,但我认为仅为此导入 Zend 框架有点过分了。 -http://permalink.gmane.org/gmane.comp.php.symfony.symfony2/54

我还发现了这个:https://github.com/symfony/symfony/pull/108 ,我可以在其中告诉 AsseticBundle 存储桶名称,但我没有找到在哪里为我的 aws 账户提供 key 和 secret 。

您能否指出更好的解决方案,或者给我一些上述问题的详细信息。

最佳答案

所以我所做的一切正在发挥作用。

添加到composer.json并安装

"aws/aws-sdk-php": "2.6.16",

创建服务:

<?php

namespace My\AcmeBundle\Amazon;

use Aws\Common\Aws;

class StreamWrapperS3 {

protected $s3;

public function __construct($key, $secret, $region) {

$aws = array(
'key' => $key,
'secret' => $secret,
'region' => $region
);

$this->s3 = Aws::factory($aws)->get('s3');

}

public function registerStreamWrapper() {
$this->s3->registerStreamWrapper();
}

}

config.yml中声明服务或将其作为文件包含

services:
my_amazon_s3:
class: My\AcmeBundle\Amazon\StreamWrapperS3
arguments: [%aws_key%, %aws_secret_key%, %aws_region%]

parameters.yml处添加参数

重写AppKernel.php处的boot()方法:

public function boot() {
parent::boot();
$s3client = $this->container->get('my_amazon_s3');;
$s3client->registerStreamWrapper();
}

config_prod.yml 添加:

framework:
templating:
assets_base_url: https://sa-east-1.amazonaws.com/your-bucket-name
assetic:
write_to: 's3://your-bucket-name'

最后添加包含您 Assets 的过滤器以正确重写您的路径:

{% stylesheets filter='cssrewrite'
'bundles/...' %}
<link rel="stylesheet" href="{{ asset_url }}" /> {# asset just to be sure that url will be right #}
{% endstylesheets %}

因此,每次您更改某些内容时都需要运行:

php app/console cache:clear --env=prod
php app/console assets:install --env=prod
php app/console assetic:dump --env=prod

一个非常重要的细节花了我近 2 天的时间,您需要更新 Amazon S3 的 CORS 才能访问一些文件,例如在 twitter bootstrap css 中添加字体。我的 CORS 权限是这样的:

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>DELETE</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>

关于amazon-s3 - 将 Symfony2 Assets 转储到 Amazon S3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8163717/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com