我在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 我清除了prod缓存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
上传文件后,我授权了
prod debug
$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
,我可以通过app_dev.php
链接访问Bypass configuration and go to the Welcome page
:
我点击了链接,我到达了app_dev.php
。就像我之前说的那样,除了控制台路由之外,在这种环境中没有发生错误。但是我可以通过单击symfony调试工具栏下的控制台徽标来访问控制台:
当我点击symfony调试工具栏下的徽标时,这是控制台的网址: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版本,我必须在.ovhconfig
文件夹的根目录/www
中设置它。
/www/.ovhconfig
:
app.engine=php
app.engine.version=5.5
http.firewall=none
environment=production
现在,当我想访问生产环境时,我有关于所有资产文件的错误( css / js / images ,找不到404):
无法加载资源:服务器响应状态为404(未找到) - >
http://my-server.com/bundles/fosjsrouting/js/router.js
未捕获的ReferenceError:未定义fos - >路由: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
2 assets:install web
3 assetic:dump web
编辑:解决方案有效
我了解资产的目标是我服务器根目录下的/css
/js
/images
等文件夹,因此我将css和js文件替换为{{1的根目录服务器文件夹,例如在我的服务器的/www
文件夹中,我有这个:
/www
为什么我的symfony应用程序在这里播放资产?
答案 0 :(得分:0)
您是否尝试过使用Symfony命令行路由调试程序?
grep
这将输出symfony app知道的所有路由,您可以尝试将其路由到php app/console debug:router | grep _console
以查看您是否尝试使用错误的路径来访问_console路由。
public class Node_Content_Adapter extends ArrayAdapter<Node_Content_Item> {
Context context;
int ResourceId;
public Node_Content_Adapter(Context context, int layoutResourceId,
List<Node_Content_Item> objects) {
super(context, layoutResourceId, objects);
this.ResourceId = layoutResourceId;
this.context = context;
}
public View getView(int position, View convertView, ViewGroup parent) {
final Node_Content_Item itemObj = getItem(position);
View listItemView;
LayoutInflater layoutInflator = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if(convertView==null)
listItemView = layoutInflator.inflate(ResourceId, null);
else
listItemView=convertView;
final RelativeLayout rlayout=(RelativeLayout) listItemView.findViewById(R.id.rlayout);
final VideoView video=(VideoView)listItemView.findViewById(R.id.videoViewMain);
//There is a layout over videoview and when layout clicked video starting to play
rlayout.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
if(video.isPlaying())
{
video.stopPlayback();
}
else
{
Uri uri=Uri.parse(itemObj.getVideourl());
video.setVideoURI(uri);
video.start();
}
}
});
return listItemView;
}