web-dev-qa-db-fra.com

Assetic générant des liens mais pas de fichiers

J'essaie d'utiliser assetic dans symfony2 pour gérer mes css. Les liens sont bien générés. Cependant, aucun fichier n'est généré.

Voici ma configuration:

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 génère le lien foo.foo/app_dev.php/css/957d3aa_main_1.css. Cependant, le fichier n'est pas là (ni ailleurs). J'ai essayé de jouer avec les autorisations et de regarder dans les journaux (nginx), mais rien pour l'instant.

Toute aide serait grandement appréciée.

24
Thomas K

Vous avez 2 options lorsque vous traitez avec des actifs. La raison pour laquelle vous ne voyez pas physiquement vos actifs sur votre ordinateur est que vous avez choisi l'option 1.


Option 1: SYMFONY PEUT TRAITER LES FICHIERS DYNAMIQUEMENT POUR VOUS

Cela signifie que chaque chemin d'actif généré dans l'environnement de développement est géré de manière dynamique par Symfony. Par conséquent, Assetic génère des chemins d'accès aux fichiers CSS et JavaScript qui n'existent pas physiquement sur votre ordinateur. Il s’agit d’un contrôleur interne Symfony qui ouvre les fichiers et vous restitue le contenu.

Avantages: _ - Les modifications apportées à vos actifs ont un effet immédiat. C'est formidable en mode dev, car Symfony génère les fichiers de manière dynamique pour vous.

Inconvénients: _ - Cela n’est pas possible en mode prod car le rendu dynamique de chaque ressource serait trop lent - Les ressources ne seront pas directement accessibles sur votre ordinateur (raison pour laquelle vous ne pouvez pas les trouver). le fichier) - Peut être assez lent si vous utilisez beaucoup de filtres, etc ...

Pour faire cela en mode dev, éditez simplement assetic config dans config_dev.yml:

assetic:
    use_controller: true

Option 2: FICHIERS D'ACTIFS DUMPING

Si vous ne souhaitez pas gérer les ressources de manière dynamique, vous pouvez vider vos ressources manuellement, ce qui signifie qu’elles doivent être écrites physiquement sur votre ordinateur.

Avantages: _ - Il n’est pas nécessaire que Symfony génère les fichiers de manière dynamique, cela fonctionnera donc beaucoup plus vite - Cela est donc parfait en mode prod - Les fichiers sont physiquement accessibles sur le Web/répertoire (ou où que vous choisissiez de les sortir)

Inconvénients:} _ - Vous devez soit vider les actifs chaque fois que vous modifiez quelque chose..ou vous pouvez vider les actifs avec la commande --watch, ce qui peut être un peu gênant si vous travaillez en mode dev.

Pour faire ça:

Définit use_controller sur false (config_dev.yml):

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

Vous pouvez même choisir où lire et sortir vos actifs si nécessaire

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

La sortie commence maintenant à partir de votre write_to config dans assetic

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

Vous aurez une erreur resource si vous continuez, alors commentez ou supprimez ces routes assetic dans config_dev.yml:

_assetic:
    resource: .
    type:     assetic

Enfin, vous pouvez générer automatiquement les actifs, de sorte que les modifications que vous apportez prennent effet immédiatement:

php app/console assetic:dump --watch

Dans ce cas, le fichier devrait maintenant être disponible:

_ {/web/thefolderyouwant/css/main.css} _

Consultez le livre de recettes pour plus d'informations: Comment utiliser Assetic for Asset Management?

35
Mick

J'ai eu une erreur très similaire à celle-ci. Soudain, Assetic cessa de travailler. La seule chose que j'ai ajoutée était le FOSRestBundle . Peut-être que vous utilisez aussi le reste.

Voici ma solution:

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 }

J'ai changé priorities: ['html', '*/*'] en priorities: ['html', 'application/javascript', 'text/css', '*/*'] et tout fonctionne bien maintenant.

0
Bruce

J'ai eu le même problème, j'avais juste besoin d'installer Java

Sudo apt-get install default-jre

vous pouvez également regarder sur le début de la sortie, cela pourrait aider:

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

Il ne génère pas non plus de fichiers lorsque use_controller: true est activé si vous utilisez SASS pour compiler SCSS mais que Ruby ou la gem Ruby sass ne soit pas installée.

0
Tek