symfony2资产以/ www服务器文件夹为目标,而不是在生产中部署时的/ web symfony文件夹

时间:2015-09-20 20:04:53

标签: php symfony deployment assets production-environment

我在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/cacheapp/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

但是这条路线不存在,如果我写了这个网址,我的浏览器中没有任何内容:enter image description here

但是,通过config.php,我可以通过app_dev.php链接访问Bypass configuration and go to the Welcome page

enter image description here

我点击了链接,我到达了app_dev.php。就像我之前说的那样,除了控制台路由之外,在这种环境中没有发生错误。但是我可以通过单击symfony调试工具栏下的控制台徽标来访问控制台: enter image description here

当我点击symfony调试工具栏下的徽标时,这是控制台的网址:http://my-server/web/app_dev.php//_console/_console,我想了解原因?

然后,当我想要发出一些命令时,在控制台中发生了另一个错误:[error] Internal Server Errorenter image description here

如果我尝试使用路由器调试php app/console debug:router,我有: enter image description here

并使用php app/console debug:router | grep _consoleenter image description here

所以,我的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应用程序在这里播放资产?

1 个答案:

答案 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; }