生产环境中的 Symfony 2 Assetic css 和 js 404
Symfony 2 Assetic css and js 404 within production environment
我已经安装了 Symphony2 框架并创建了我自己的包。
我正在为我的 js 和 css 文件使用 assetic。
我在我的服务器上运行 ubuntu 并在我的本地机器上运行。
当我在本地访问 app_dev.php 时,所有资产都可以正常使用。
当我在本地访问 app.php 时,所有资产都可以正常使用。
但是在我的服务器上,路由被渲染但是资产(css & js)我得到一个 404。
当我跟踪 prod.log 时,我在下面得到一个未捕获的异常:
PHP Exception Symfony\Component\HttpKernel\Exception\NotFoundHttpException: "No route found for "GET /admin/css/875a243.css""
我在网上到处搜索,似乎无法弄明白。
我已经清除缓存,转储assetic,安装assets,所有权限都正确。
我的应用程序 routing.yml 配置:
brs:
resource: "@BrsAdminBundle/Resources/config/routing.yml"
prefix: /
我的包routing.yml配置
admin:
path: /admin/
defaults: { _controller: BrsAdminBundle:Admin:index }
我的应用配置:
imports:
- { resource: parameters.yml }
- { resource: security.yml }
- { resource: assets.yml }
framework:
#esi: ~
#translator: { fallback: "%locale%" }
secret: "%secret%"
router:
resource: "%kernel.root_dir%/config/routing.yml"
strict_requirements: ~
form: ~
csrf_protection: ~
validation: { enable_annotations: true }
templating:
engines: ['twig']
#assets_version: SomeVersionScheme
default_locale: "%locale%"
trusted_proxies: ~
session: ~
fragments: ~
http_method_override: true
# Twig Configuration
twig:
debug: "%kernel.debug%"
strict_variables: "%kernel.debug%"
# Assetic Configuration
assetic:
debug: "%kernel.debug%"
use_controller: false
bundles: [ ]
#java: /usr/bin/java
filters:
cssrewrite: ~
#closure:
# jar: "%kernel.root_dir%/Resources/java/compiler.jar"
#yui_css:
# jar: "%kernel.root_dir%/Resources/java/yuicompressor-2.4.7.jar"
# Doctrine Configuration
doctrine:
dbal:
driver: "%database_driver%"
host: "%database_host%"
port: "%database_port%"
dbname: "%database_name%"
user: "%database_user%"
password: "%database_password%"
charset: UTF8
# if using pdo_sqlite as your database driver:
# 1. add the path in parameters.yml
# e.g. database_path: "%kernel.root_dir%/data/data.db3"
# 2. Uncomment database_path in parameters.yml.dist
# 3. Uncomment next line:
# path: "%database_path%"
orm:
auto_generate_proxy_classes: "%kernel.debug%"
auto_mapping: true
# Swiftmailer Configuration
swiftmailer:
transport: "%mailer_transport%"
host: "%mailer_host%"
username: "%mailer_user%"
password: "%mailer_password%"
spool: { type: memory }
我的 asset.yml 配置:
assetic:
assets:
bootstrap_js:
inputs:
- '%Kernel.root_dir%/Resources/public/js/jquery-2.1.3.min.js'
- '%Kernel.root_dir%/Resources/public/js/bootstrap.min.js'
bootstrap_css:
inputs:
- '%Kernel.root_dir%/Resources/public/css/bootstrap.min.css'
- '%Kernel.root_dir%/Resources/public/css/bootstrap-theme.min.css'
admin_css:
inputs:
- '@BrsAdminBundle/Resources/public/css/styles.css'
我的 base.html.twig 使用 assetic:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>{% block title %}BankRoll Supply{% endblock %}</title>
{% block stylesheets %}
{% stylesheets '@bootstrap_css' '@admin_css' %}
<link rel="stylesheet" type="text/css" href="{{ asset_url }}" />
{% endstylesheets %}
{% endblock %}
<link rel="icon" type="image/x-icon" href="{{ asset('favicon.ico') }}" />
</head>
<body>
{% block body %}{% endblock %}
{% block javascripts %}
{% javascripts '@bootstrap_js' %}
<script type="text/javascript" src="{{ asset_url }}"></script>
{% endjavascripts %}
{% endblock %}
</body>
</html>
如有任何帮助,我们将不胜感激。
谢谢,
广告
您好,我认为您因为 cssrewrite 而遇到问题。
您有两个选择;
指定输出目录
手动指向文件并在 twig 中使用 cssrewrite 过滤器。看这里; http://symfony.com/doc/current/cookbook/assetic/asset_management.html#fixing-css-paths-with-the-cssrewrite-filter
这是第一个选项的例子
您可以为资产指定输出目录。下面的示例指向“/web/bundles/yourbundle/css”,执行 assets:install --env=prod
和 assetic:dump --env=prod
,我认为你可以开始了。
{% stylesheets
'@admin_css'
output='bundles/yourbundle/css/admin_style.css'
%}
<link href="{{ asset_url }}?{{ AssetVersion }}" rel="stylesheet" type="text/css">
{% endstylesheets %}
我还必须提到,当您在 asset.yml 中定义您的资产时,assetic:dump
会在您的 public 资产目录中生成一个 assets
文件夹,而您不会这样做在这种情况下不需要。要删除该文件夹,您可以在 twig 中使用此语法;
{% stylesheets
'@YourBundle/Resources/public/css/admin.css'
output='bundles/yourbundle/css/admin_style.css'
%}
<link href="{{ asset_url }}?{{ AssetVersion }}" rel="stylesheet" type="text/css">
{% endstylesheets %}
我已经安装了 Symphony2 框架并创建了我自己的包。 我正在为我的 js 和 css 文件使用 assetic。
我在我的服务器上运行 ubuntu 并在我的本地机器上运行。
当我在本地访问 app_dev.php 时,所有资产都可以正常使用。
当我在本地访问 app.php 时,所有资产都可以正常使用。
但是在我的服务器上,路由被渲染但是资产(css & js)我得到一个 404。
当我跟踪 prod.log 时,我在下面得到一个未捕获的异常:
PHP Exception Symfony\Component\HttpKernel\Exception\NotFoundHttpException: "No route found for "GET /admin/css/875a243.css""
我在网上到处搜索,似乎无法弄明白。
我已经清除缓存,转储assetic,安装assets,所有权限都正确。
我的应用程序 routing.yml 配置:
brs:
resource: "@BrsAdminBundle/Resources/config/routing.yml"
prefix: /
我的包routing.yml配置
admin:
path: /admin/
defaults: { _controller: BrsAdminBundle:Admin:index }
我的应用配置:
imports:
- { resource: parameters.yml }
- { resource: security.yml }
- { resource: assets.yml }
framework:
#esi: ~
#translator: { fallback: "%locale%" }
secret: "%secret%"
router:
resource: "%kernel.root_dir%/config/routing.yml"
strict_requirements: ~
form: ~
csrf_protection: ~
validation: { enable_annotations: true }
templating:
engines: ['twig']
#assets_version: SomeVersionScheme
default_locale: "%locale%"
trusted_proxies: ~
session: ~
fragments: ~
http_method_override: true
# Twig Configuration
twig:
debug: "%kernel.debug%"
strict_variables: "%kernel.debug%"
# Assetic Configuration
assetic:
debug: "%kernel.debug%"
use_controller: false
bundles: [ ]
#java: /usr/bin/java
filters:
cssrewrite: ~
#closure:
# jar: "%kernel.root_dir%/Resources/java/compiler.jar"
#yui_css:
# jar: "%kernel.root_dir%/Resources/java/yuicompressor-2.4.7.jar"
# Doctrine Configuration
doctrine:
dbal:
driver: "%database_driver%"
host: "%database_host%"
port: "%database_port%"
dbname: "%database_name%"
user: "%database_user%"
password: "%database_password%"
charset: UTF8
# if using pdo_sqlite as your database driver:
# 1. add the path in parameters.yml
# e.g. database_path: "%kernel.root_dir%/data/data.db3"
# 2. Uncomment database_path in parameters.yml.dist
# 3. Uncomment next line:
# path: "%database_path%"
orm:
auto_generate_proxy_classes: "%kernel.debug%"
auto_mapping: true
# Swiftmailer Configuration
swiftmailer:
transport: "%mailer_transport%"
host: "%mailer_host%"
username: "%mailer_user%"
password: "%mailer_password%"
spool: { type: memory }
我的 asset.yml 配置:
assetic:
assets:
bootstrap_js:
inputs:
- '%Kernel.root_dir%/Resources/public/js/jquery-2.1.3.min.js'
- '%Kernel.root_dir%/Resources/public/js/bootstrap.min.js'
bootstrap_css:
inputs:
- '%Kernel.root_dir%/Resources/public/css/bootstrap.min.css'
- '%Kernel.root_dir%/Resources/public/css/bootstrap-theme.min.css'
admin_css:
inputs:
- '@BrsAdminBundle/Resources/public/css/styles.css'
我的 base.html.twig 使用 assetic:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>{% block title %}BankRoll Supply{% endblock %}</title>
{% block stylesheets %}
{% stylesheets '@bootstrap_css' '@admin_css' %}
<link rel="stylesheet" type="text/css" href="{{ asset_url }}" />
{% endstylesheets %}
{% endblock %}
<link rel="icon" type="image/x-icon" href="{{ asset('favicon.ico') }}" />
</head>
<body>
{% block body %}{% endblock %}
{% block javascripts %}
{% javascripts '@bootstrap_js' %}
<script type="text/javascript" src="{{ asset_url }}"></script>
{% endjavascripts %}
{% endblock %}
</body>
</html>
如有任何帮助,我们将不胜感激。
谢谢,
广告
您好,我认为您因为 cssrewrite 而遇到问题。
您有两个选择;
指定输出目录
手动指向文件并在 twig 中使用 cssrewrite 过滤器。看这里; http://symfony.com/doc/current/cookbook/assetic/asset_management.html#fixing-css-paths-with-the-cssrewrite-filter
这是第一个选项的例子
您可以为资产指定输出目录。下面的示例指向“/web/bundles/yourbundle/css”,执行 assets:install --env=prod
和 assetic:dump --env=prod
,我认为你可以开始了。
{% stylesheets
'@admin_css'
output='bundles/yourbundle/css/admin_style.css'
%}
<link href="{{ asset_url }}?{{ AssetVersion }}" rel="stylesheet" type="text/css">
{% endstylesheets %}
我还必须提到,当您在 asset.yml 中定义您的资产时,assetic:dump
会在您的 public 资产目录中生成一个 assets
文件夹,而您不会这样做在这种情况下不需要。要删除该文件夹,您可以在 twig 中使用此语法;
{% stylesheets
'@YourBundle/Resources/public/css/admin.css'
output='bundles/yourbundle/css/admin_style.css'
%}
<link href="{{ asset_url }}?{{ AssetVersion }}" rel="stylesheet" type="text/css">
{% endstylesheets %}