在Web服务器上部署symfony时无法加载资产:未导入资产,无法加载资源错误404

时间:2015-07-28 10:31:45

标签: symfony deployment server http-status-code-404 web-deployment

我正在尝试部署symfony应用程序进行生产测试。我按照许多步骤解释:

  1. 首先,我安装了CoreSphereConsoleBundle,以便拥有一个浏览器控制台。在我的本地配置(Windows 7和wamp服务器apache)中,当我想使用她时,我写了这个URL C:\wamp\www\myApp\app_web.php\_console。它运作良好。但是在我的 OVH 共享服务器中,当我写www.mydomain.com/web/_console时,它根本不起作用(我不明白为什么!)。

  2. 然后我按照symfony doc的步骤进行操作; e-g我清除了缓存php app/console cache:clear,还清除了php app/console cache:clear --env=prod

  3. 的prod environement
  4. 我允许调试模式。

  5. \web\app.php

    <?php
    // web/app.php
    
    // …
    
    $kernel = new AppKernel('prod', true); // set the 2nd argument to true
    
    1. 我检查了兼容性服务器:
    2. web/config.php

      /*if (!in_array(@$_SERVER['REMOTE_ADDR'], array(
        '127.0.0.1',
        '::1',
      ))) {
        header('HTTP/1.0 403 Forbidden');
        exit('This script is only accessible from localhost.');
      }*/
      

      所以当我显示网址www.mydomain.com/web/config.php时,我的配置页面没有错误。 当然,在我允许自己的IP adress之后,我也允许cachelogs文件夹转到chmod 777

      1. 我修改了.htaccess 文件。我有两个htacess文件,一个在我的服务器的根目录,另一个在web文件夹中。
      2. /.htaccess(根服务器)

        SetEnv SHORT_OPEN_TAGS 0
        SetEnv REGISTER_GLOBALS 0
        SetEnv MAGIC_QUOTES 0
        SetEnv SESSION_AUTOSTART 0
        SetEnv ZEND_OPTIMIZER 1
        SetEnv PHP_VER 5_4_11
        AddType x-mapp-php5 .php
        
        RewriteEngine on
        
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^(.*)$ web/app.php [QSA,L]
        

        /web/.htaccess(网络文件夹):

        SetEnv SHORT_OPEN_TAGS 0
        SetEnv REGISTER_GLOBALS 0
        SetEnv MAGIC_QUOTES 0
        SetEnv SESSION_AUTOSTART 0
        SetEnv ZEND_OPTIMIZER 1
        SetEnv PHP_VER 5_4_11
        AddType x-mapp-php5 .php
        
        RewriteEngine On
        
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^(.*)$ app.php [QSA,L]
        
        1. 我做了框架所需的所有配置(我的服务器的数据库配置,教程,框架配置等)。
        2. 一切正常,e-g我的应用程序在我去主页时正在部署和显示。但我的资产 未加载。实际上,我的css filesjs filesimages未导入

          在部署symfony应用程序时,我在哪里犯了错误?

          我想我必须在服务器上安装资产,但我无法访问 CoreSphereConsoleBundle console,并注意到我有一个共享服务器而不是专用服务器服务器即可。 在主页面上,我的浏览器本机控制台(谷歌浏览器)显示了每个脚本,css文件和其他客户端针的错误:

            

          无法加载资源:服务器响应状态为404   (未找到)

          我在我的应用程序中正确导入了我的资源,并且在我的本地配置中它可以正常工作:

          layout.html.twig

          {% block script %}
            <script src="{{ asset('bundles/fosjsrouting/js/router.js') }}"></script>
            <script src="{{ path('fos_js_routing_js', {'callback': 'fos.Router.setData'}) }}"></script>
            {% javascripts
              '@MySpaceMyBundle/Resources/public/js/jquery-2.1.3.min.js'
              '@MySpaceMyBundle/Resources/public/js/bootstrap.min.js'
              '@MySpaceMyBundle/Resources/public/js/hinclude.min.js'
              ...
              'http://code.highcharts.com/stock/highstock.js'%}
              <script type="text/javascript" src="{{ asset_url }}"></script>
            {% endjavascripts %}
          {% endblock %}
          
          {% block stylesheets %}
            <link rel="stylesheet" href="{{ asset('bundles/MySpaceMyBundle/css/bootstrap-theme.min.css') }}" type="text/css" media="all"/>
            <link rel="stylesheet" href="{{ asset('bundles/MySpaceMyBundle/css/bootstrap.min.css') }}" type="text/css" media="all"/>
            ...
            {# animate CSS #}
            <link rel="stylesheet" href="{{ asset('bundles/MySpaceMyBundle/css/animate.min.css') }}" type="text/css" media="all"/>
            {# dataTables CSS #}
          {% endblock %}
          

1 个答案:

答案 0 :(得分:1)

我检查了捆绑包。 在其安装指南中,他们要求您在routing_dev.yml

中添加路由
#app/config/routing_dev.yml
_console:
    resource: "@CoreSphereConsoleBundle/Resources/config/routing.yml"
    prefix: /_console

由于您已将app ENV设置为prod,因此routing_dev.yml中的路由无法在PROD中工作。

如果你想在你的PROD ENV中访问/ _console,你应该将他们给出的路由配置移到app/config/routing.yml

Bundle安装也指导您在AppKernel的dev部分注册bundle。

if (in_array($this->getEnvironment(), array('dev', 'test'))) {
    // ...
    $bundles[] = new CoreSphere\ConsoleBundle\CoreSphereConsoleBundle();
}

你应该把它移到其他捆绑(非开发者)注册的地方..

PS:一旦你这样做,控制台就可以运行了,但是它有一个严重的安全问题,并为任何人提供了一个简单的方法,可以随你的应用做任何他们想要的事情..

这就是为什么要将此捆绑包限制为本地使用的原因。如果您真的想在PRO env中启用此功能,我强烈建议您配置安全防火墙以限制路由只能访问站点管理员

示例:

#app/config/security.yml    
access_control:
        - { path: ^/_console$, role: ROLE_ADMIN }