我正在尝试部署一个symfony应用程序用于生产测试。我遵循了许多步骤,我将解释:
-
首先,我安装了CoreSphereConsoleBundle,以便有一个浏览器控制台。在我的本地配置(windows 7和wamp服务器apache),当我想使用她我写这个url
C:wampwwwmyAppapp_web.php_console
。效果很好。但是在我的OVH共享服务器中,当我写www.mydomain.com/web/_console
时,它根本不工作(我不明白为什么!)。 -
然后我按照symfony文档的步骤;e-g我清除了
php app/console cache:clear
缓存,也为php app/console cache:clear --env=prod
的prod环境清理了缓存。 我允许调试模式
webapp.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.');
}*/
因此,当我显示url www.mydomain.com/web/config.php
时,我有很好的配置页面,没有错误。当然,在我允许我自己的IP adress
和cache
和logs
文件夹也允许chmod 777
之后。
- 我编辑我的
.htaccess
文件。我有两个haccess文件,一个在我的服务器的根目录,另一个在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
(web文件夹):
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]
一切都工作得很好,例如我的应用程序正在部署和显示,当我去主页。但是我的资产是未加载。事实上,我的css files
, js files
或images
等没有导入。
当我部署symfony应用程序时,我在哪里犯了错误?
我认为我必须在服务器上安装资产,但我无法访问CoreSphereConsoleBundle console
,并注意到我有一个共享服务器而不是专用服务器。在主页上,我的浏览器本地控制台(google chrome)显示了每个脚本,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 %}
我检查了这个包。在它的安装指南中,他们要求你在routing_dev.yml
#app/config/routing_dev.yml
_console:
resource: "@CoreSphereConsoleBundle/Resources/config/routing.yml"
prefix: /_console
因为你已经将应用的ENV设置为prod,所以routing_dev中的路由。
如果你想访问PROD ENV中的/_console,你应该移动他们给app/config/routing.yml
的路由配置
Bundle安装指导你在AppKernel的dev部分注册Bundle。
if (in_array($this->getEnvironment(), array('dev', 'test'))) {
// ...
$bundles[] = new CoreSphereConsoleBundleCoreSphereConsoleBundle();
}
你应该把它移到其他bundle(非dev)注册的地方。
PS:一旦你这样做了,控制台就会工作,但这是一个严重的安全问题,并且为任何人提供了一种简单的方法来做他们想做的任何事情。
,这就是为什么你应该限制这个bundle只在本地使用。如果您真的想在PRO环境中启用此功能,我强烈建议您配置安全防火墙,将路由访问限制为仅站点管理员
的例子:
#app/config/security.yml
access_control:
- { path: ^/_console$, role: ROLE_ADMIN }