web-dev-qa-db-ja.com

資産生成リンクがファイルなし

私は自分のCSSを管理するためにsymfony2でasseticを使用しようとしています。リンクは正常に生成されます。ただし、ファイルは生成されません。

これが私の設定です:

Layout.html.twig

    {% stylesheets
      '@FooBundle/Resources/public/css/main.css'
      filter='cssrewrite'
    %}
    <link rel="stylesheet" href="{{ asset_url }}" />
    {% endstylesheets %}

Config.yml

assetic:
debug:          %kernel.debug%
use_controller: false
bundles:        [ FooBundle ]
filters:
    cssrewrite: ~

Config_dev.yml

assetic:
use_controller: true

Asseticはリンクを生成しますfoo.foo/app_dev.php/css/957d3aa_main_1.css。ただし、ファイルはそこ(または他の場所)にありません。パーミッションをいじって(nginx)ログを調べてみましたが、今のところ何もありません。

すべての助けをいただければ幸いです。

24
Thomas K

資産を扱う場合、2つのオプションがあります。コンピューターにアセットが物理的に表示されない理由は、オプション1を選択したためです。


オプション1:SYMFONYはあなたのためにファイルを動的に処理することができます

つまり、開発環境で生成された各アセットパスはSymfonyによって動的に処理されます。したがって、Asseticは、コンピューター上に物理的に存在しないCSSおよびJavaScriptファイルへのパスを生成します。これは、ファイルを開いてコンテンツを提供する内部Symfonyコントローラーです。

利点:-アセットに加えられた変更はすぐに有効になります-これはSymfonyとしての開発モードで素晴らしいですファイルを動的に生成します

短所:-各アセットの動的レンダリングが遅すぎるため、これは本番モードでは不可能です-コンピューターからアセットに直接アクセスすることはできません(そのため、ファイルが見つかりません)-多数のフィルターなどを使用している場合は、非常に遅くなる可能性があります...

開発モードでこれを行うには、config_dev.ymlでasseticconfigを編集するだけです。

assetic:
    use_controller: true

オプション2:アセットファイルのダンプ

アセットを動的に処理したくない場合は、アセットを手動でダンプできます。つまり、実際にアセットをコンピューターに物理的に書き込むことができます。

利点:-Symfonyがファイルを動的に生成する必要がないため、実行速度が大幅に向上します-したがって、これはprodモードで完璧です-ファイルはweb /ディレクトリ(またはファイルを出力することを選択した場所)で物理的にアクセスできます

デメリット:-何かを変更するたびにアセットをダンプする必要があります。 --watchコマンドを使用してアセットをダンプします。これは、開発モードで作業している場合、少し煩わしい可能性があります。

これをする:

use_controllerをfalseに設定します(config_dev.yml):

assetic:
    debug:          %kernel.debug%
    use_controller: false

必要に応じて、アセットを読み取って出力する場所を選択することもできます

   assetic:
        read_from:      %kernel.root_dir%/Resources/views/
        write_to:       %kernel.root_dir%/../web/thefolderyouwant/

出力は、asseticのwrite_to構成から開始されます。

{% stylesheets
  '@FooBundle/Resources/public/css/main.css'
  output='css/main.css'
%}
<link rel="stylesheet" href="{{ asset_url }}" />
{% endstylesheets %}

続行すると リソースエラー になるので、config_dev.ymlでこれらのアセットルートをコメントアウトまたは削除します。

_assetic:
    resource: .
    type:     assetic

最後に、アセットを自動的に生成して、行った変更がすぐに有効になるようにすることができます。

php app/console assetic:dump --watch

その場合、ファイルは利用可能になります。

/ web/thefolderyouwant/css/main.css

詳細については、クックブックを参照してください。 資産管理にAsseticを使用する方法は?

35
Mick

これと非常によく似たエラーが発生しました。突然、資産が機能しなくなりました。私が追加したのは FOSRestBundle だけでした。残りのバンドルも使用している可能性があります。

これが私の解決策です:

fos_rest:
    routing_loader:
        default_format: json

    param_fetcher_listener: true
    body_listener: true

    format_listener:
        rules:
            # render "/api" requests as json
            - { path: ^/api, priorities: [ json ], fallback_format: json, prefer_extension: true }
            # default, fallback rendering twig templates
            - { path: ^/, priorities: ['html', 'application/javascript', 'text/css', '*/*'], fallback_format: html, prefer_extension: true }

私が変更され priorities: ['html', '*/*']からpriorities: ['html', 'application/javascript', 'text/css', '*/*']そしてすべてが正常に動作するようになりました。

0
Bruce

私は同じ問題を抱えていました、私はただJavaをインストールする必要がありました

Sudo apt-get install default-jre

出力の始まりを確認することもできます。これは次の場合に役立ちます。

app/console assetic:dump > outfile 2>&1
0

また、SASSを使用してSCSSをコンパイルしているが、RubyまたはRuby gem sassの場合、use_controller: trueがオンの場合、ファイルは生成されません。インストールされていない。

0
Tek

私はついに解決策を見つけました!!私はこの問題に何時間も取り組みました!あなたが書いた:

'@FooBundle/Resources/public/css/main.css' filter='cssrewrite'

しかし、「cssrewrite」フィルターは@FooBundle構文を受け入れません!あなたがしなければなりません:

php app/console assets:install

Symfonyは以下を作成します:

web/bundles/yourbundle/css/main.css

ここで、twigテンプレートで、次を置き換えます。

'@FooBundle/Resources/public/css/main.css' filter='cssrewrite'

と:

'bundles/yourbundle/css/main.css' filter='cssrewrite'

それが他の誰かを助けることになることを願っています! (Symfonyのドキュメントに書かれています。^^)

0
Massya92