3

Gaufretteバンドルを使用してファイルシステムを管理し、Amazon s3 で動作するようにストリーム ラッパーを構成しています。assetic を使用してアセットを正常にダンプできます。現在の構成は次のとおりです。

knp_gaufrette:
    adapters:
        amazon:
            amazon_s3: 
                amazon_s3_id: site_store.s3
                bucket_name: %site_store.bucket_name%
                create: true

    filesystems:
        amazon:
            adapter: amazon

    stream_wrapper:
        protocol: s3
        filesystems:
            - amazon

assetic:
    read_from:      %cdn_path_prod%
    write_to:       %cdn_path_prod%

そして私のパラメータ:

  cdn_url_prod: "http://images.site.com/"
    cdn_path_prod: "s3://amazon"

app/console assetic:dump --env=dev を実行できました。次に、アセットを s3 バケットに正常にアップロードします。ただし、アセットのインストールで同じことをしようとすると、次のようになります。

app/console assets:install s3://amazon

それは私にこのエラーを与えます:

[InvalidArgumentException]  
The specified path (s3://amazon) is invalid.

私はウェブを見てきましたが、誰かがここで説明したようにそれを行うことができました. スチームラッパーの何が問題になっていますか?

4

2 に答える 2

2

だから私がやったこととそれは働いています。

at を追加し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();
    }

}

パラメータを追加します: aws_keyaws_secret_keyaws_regioninparameters.yml

boot()でメソッドをオーバーライドAppKernel.php:

public function boot() {
    parent::boot();
    $s3client = new \Path\to\Amazon\StreamWrapperS3($this->container->getParameter('aws_key'), $this->container->getParameter('aws_secret_key'), $this->container->getParameter('aws_region'));
    $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'

最後に、アセットにフィルターを追加して、パスを正しく書き換えます。

{% stylesheets filter='cssrewrite'
    'bundles/...' %}
    <link rel="stylesheet" href="{{ asset(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 s3://<your-bucket-name> --env=prod
php app/console assetic:dump --env=prod

私の時間のほぼ 2 日を要した非常に重要な詳細です。たとえば、フォントが twitter ブートストラップ css 内に追加されるため、Amazon S3 の CORS を更新して一部のファイルにアクセスする必要があります。私の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>
于 2014-10-01T16:59:15.123 に答える