【发布时间】:2015-09-20 20:04:53
【问题描述】:
我在 Symfony 2 应用程序部署方面遇到了一些问题。我已经在我的 OVH 共享服务器上导入了我需要的所有文件,但是出现了一些错误,例如找不到 css 和 js 文件(例如内部服务器错误)或类似 Resource interpreted as Stylesheet but transferred with MIME type text/html: "http://my-server/css/458dafd_bootstrap-theme.min_1.css" 的错误。
请注意,我已经安装了CoresphereBundle,以便在我的应用程序在我的服务器上加载时在我的浏览器中有一个控制台,我只能在开发环境中访问控制台。
这是我为部署我的应用程序所做的一步一步:
1我用 composer 更新了我的应用程序和供应商(因为我无法在我的服务器上安装 composer)
composer.phar update
2我清除了开发缓存php app/console cache:clear
3我清除了产品缓存php app/console cache:clear --env=prod --no-debug
4我安装资产php app/console assets:install web
5我转储资产php app/console assetic:dump web
6我在我的服务器上上传了我的 symfony 应用程序。
7 一旦文件上传到web/app.php 我授权
产品调试
$kernel = new AppKernel('prod', true);
8然后在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.');
}
所以,在我的服务器上,如果我想去http://my-server/web/config.php 它工作得很好,所以我看看我的服务器是否与 symfony 兼容。唯一出现的是Set short_open_tag to off in php.ini*.
9我在我的服务器上将app/cache和app/log文件夹的访问权限设置为777,它允许应用程序写入这些文件夹。
10 我在web/app_dev.php 中编写了这段代码,以便为我的 IP 地址允许开发模式,从而可以访问控制台包
// …
if (!in_array(@$_SERVER['REMOTE_ADDR'], array(
'127.0.0.1',
'::1',
'121.457.719.2' //a random ip adress it's just for you to understand
))) {
header('HTTP/1.0 403 Forbidden');
exit('You are not allowed to access this file. Check '.basename(__FILE__).' for more information.');
}
11 所以我可以访问我服务器上的开发环境,一切正常,这里没有出现错误。要访问控制台包,按照包文档,我必须写http://my-server/web/app_dev.php/_console(请参阅此处的路由代码):
_console:
resource: "@CoreSphereConsoleBundle/Resources/config/routing.yml"
prefix: /_console
但是这条路线不存在,如果我写了这个网址,我的浏览器中什么也没有出现:
但是,通过config.php,我可以通过Bypass configuration and go to the Welcome page 链接访问app_dev.php:
我点击链接并到达app_dev.php。就像我之前说的,这个环境没有出现错误,除了控制台路由。但是我可以通过单击 symfony 调试工具栏下的控制台徽标来访问控制台:
这是我点击symfony调试工具栏下的logo时控制台的url:http://my-server/web/app_dev.php//_console/_console,我想知道为什么?
然后当我想做一些命令时,另一个错误发生了:[error] Internal Server Error 在控制台中:
如果我尝试使用路由器调试php app/console debug:router,我有这个:
和php app/console debug:router | grep _console:
所以,我的 symfony 应用程序存在一些问题。
更新
我解决了控制台捆绑包的问题。事实上,我的服务器没有使用我的 symfony 应用程序的相同 php 版本,我必须在我的 /www 文件夹的根目录下的 .ovhconfig 中设置它。
/www/.ovhconfig:
app.engine=php
app.engine.version=5.5
http.firewall=none
environment=production
现在,当我想访问生产环境时,我的所有资产文件都出现以下错误(css/js/images,未找到 404):
加载资源失败:服务器响应状态为 404 (Not Found) ->
http://my-server.com/bundles/fosjsrouting/js/router.jsUncaught ReferenceError: fos is not defined -> routing:1
加载资源失败:服务器响应状态为 404(未找到) ->
http://my-server.com/css/45898d_dataTables.min_7.css
我不太明白,文件确实在应用程序的根目录下,例如我在http://my-server.com/ 中没有文件夹 css 或 js 等。这些文件夹位于http://my-server.com/web/。问题出在哪里?
当我访问控制台时,这是我发出的命令:
1 cache:clear
2assets:install web
3assetic:dump web
编辑:解决方案有效
我知道资产的目标是服务器根目录下的 /css /js /images etc 文件夹,因此我将 css 和 js 文件替换为 /www 服务器文件夹的根目录,例如在/www 我服务器的文件夹我有这个:
//my server
/.ssh
/www /*http://my-server.com/...*/
/app/
/bin/
/css/
/fonts/
/images/
/js/
/src/
/vendor/
/web/
/.htaccess
/.ovhconfig
/composer.json
/composer.lock
/composer.phar
为什么我的 symfony 应用程序在此处标记资产?
【问题讨论】:
-
我想在此处添加一条注释:如果您查看此捆绑包
routing.yml文件,您会注意到它们的路由已经以_console/routing.yml 为前缀。当您导入此文件时,您会再次添加_console/前缀 - 因此您会得到输出。您可以简单地省略前缀。 -
@Artamiel 好的,我明白你的建议,所以我删除了
routing_dev.yml中的_console路由,但是我在模态中出现错误:加载时出错调试工具栏(错误 500)。:An exception has been thrown during the rendering of a template ("Unable to generate a URL for the named route "console" as such route does not exist.") in CoreSphereConsoleBundle:Toolbar:toolbar.html.twig at line 5. -
不,您仍然需要导入文件。试试不带
prefix部分。 -
@Artamiel 我听从了你的建议,它有效,我已经导入了没有前缀部分的路线。它有效,我有正确的路线网址。但是,当我在控制台中提交命令时,
[error] Internal Server Error消息仍然存在 -
可能出于任何原因。您是否尝试过查看日志?
app/logs中应该有 monolog 记录的内容。
标签: php symfony deployment assets production-environment