我正在尝试部署symfony应用程序进行生产测试。我按照许多步骤解释:
首先,我安装了CoreSphereConsoleBundle,以便拥有一个浏览器控制台。在我的本地配置(Windows 7和wamp服务器apache)中,当我想使用她时,我写了这个URL C:\wamp\www\myApp\app_web.php\_console
。它运作良好。但是在我的 OVH 共享服务器中,当我写www.mydomain.com/web/_console
时,它根本不起作用(我不明白为什么!)。
然后我按照symfony doc的步骤进行操作; e-g我清除了缓存php app/console cache:clear
,还清除了php app/console cache:clear --env=prod
我允许调试模式。
\web\app.php
:
<?php
// web/app.php
// …
$kernel = new AppKernel('prod', true); // set the 2nd argument to true
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
之后,我也允许cache
和logs
文件夹转到chmod 777
。
.htaccess
文件。我有两个htacess文件,一个在我的服务器的根目录,另一个在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 ^(.*)$ 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]
一切正常,e-g我的应用程序在我去主页时正在部署和显示。但我的资产 未加载。实际上,我的css files
,js files
或images
等未导入。
在部署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 %}
答案 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 }