触发Symfony缓存,资产,样式刷新HTTP

时间:2016-08-30 11:16:15

标签: php symfony

我正在研究Symfony 2 WebApp。 WebApp已经上线了大约两年,现在我想更新设计。这项工作应该外包给第三方设计师。

设计人员应该能够使用WebApp的实时版本(=实际在我的服务器上运行而不仅仅是普通文件),以便在刷新浏览器时立即看到设计更改。因此,设计人员需要能够在服务器上直接更改/添加文件,并在需要时刷新缓存,资源和样式(使用SASS + Compass)。 / p>

同时,设计人员不应对WebApp代码和服务器本身都进行一般访问。

仅访问设计文件已经解决:我已将所有必需的文件/文件夹从Symfony安装移动到设计人员可通过FTP访问的单独文件夹。在Symfony安装中,文件/文件夹已被符号链接(see my question here)替换。

这很有效。唯一的问题是,目前缓存/资产/样式刷新目前只能通过SSH直接访问来触发:

$ php app/console cache:clear --env=prod --no-debug
$ php app/console assetic:dump --env=prod --no-debug
$ compass compile --output-style compressed --force

是否有可能通过HTTP(S)公开这些命令?当然,设计师将致力于专门的Symfony安装。因此,更改不会对实时版本产生任何影响。

问题是,app/console...位于WebApp的域根之外。当然我可以设置另一个域指向app/console...但是这样,这个目录下面的所有其他文件和文件夹也可以访问。

此外,我不确定,是否可以从HTTP运行compass compile...。怎么办呢?

我知道,在使用dev前端控制器(.../app_dev.php/...)时,刷新缓存和资产并非绝对必要,但无法刷新/重新编译Compass和SASS文件,样式更改将不会显示

所以:这可以通过HTTP完成吗?也许使用PHP调用的一些代理脚本?

3 个答案:

答案 0 :(得分:0)

我认为最好隐藏尽可能多的东西,以便让第三方更轻松地使用您的项目。因此,我建议在幕后自动处理

因此:

  • SASS - 我会运行Gulp / Grunt watch任务服务器端,它会在每次保存时重新编译SASS文件。这应该是无效的。 (我很少用户,但我想在SASS中的工作方式基本相同)

  • cache:clear - 我建议您只需关闭第三方将要处理的实例上的缓存。它可以通过几种方式完成。您可以将app_dev.php设置为入口点而不是app.php,但是您应该关闭探查器。如果您不想更改dev,则可以创建单独的环境。您也可以更改prod配置。

  • assetic:dump - 我个人不喜欢Assetic并且不使用它,所以在这种情况下我可能错了。无论如何,当我阅读here时,在dev环境中,无需动态传递资产,因此缓存问题的解决方案也应该适用于此。

    < / LI>

答案 1 :(得分:0)

我使用SVN,repo在我们的服务器上,网站是一个checkout文件夹,设计师也有一个checkout文件夹。

制作一个可以制作svn update .cache:clear

的cron

有了这个,你可以授予他访问权限和控制权的权限。 您可以隐藏参数,服务和实体。

这肯定不是生产,而是集成服务器

答案 2 :(得分:0)

要通过HTTP(S)公开这些命令,您可以为设计人员添加一个路径,在控制器中调用一个动作来运行PHP命令,如in the doc所述:

// src/AppBundle/Controller/CommandController.php
namespace AppBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Console\Application;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\Console\Input\ArrayInput;
use Symfony\Component\Console\Output\NullOutput;
use Symfony\Component\HttpFoundation\Response;

class CommandController extends Controller
{
    public function refreshAction()
    {
        $kernel = $this->get('kernel');
        $application = new Application($kernel);
        $application->setAutoExit(false);

        $input = new ArrayInput(
            array(
                'command' => 'cache:clear',
                '--env' => 'prod',
            ),
            array(
                'command' => 'assetic:dump',
                '--env' => 'prod',
            ),
        );

        // You don't need the output
        $output = new NullOutput();
        $application->run($input, $output);

        $content = "Refreshed";

        return new Response($content);
    }
}

对于compass命令,您可以使用giorgio comment中提到的assetic:watch