我正在研究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调用的一些代理脚本?
答案 0 :(得分:0)
我认为最好隐藏尽可能多的东西,以便让第三方更轻松地使用您的项目。因此,我建议在幕后自动处理 。
因此:
SASS - 我会运行Gulp / Grunt watch
任务服务器端,它会在每次保存时重新编译SASS文件。这应该是无效的。 (我很少用户,但我想在SASS中的工作方式基本相同)
cache:clear
- 我建议您只需关闭第三方将要处理的实例上的缓存。它可以通过几种方式完成。您可以将app_dev.php
设置为入口点而不是app.php
,但是您应该关闭探查器。如果您不想更改dev
,则可以创建单独的环境。您也可以更改prod
配置。
assetic:dump
- 我个人不喜欢Assetic并且不使用它,所以在这种情况下我可能错了。无论如何,当我阅读here时,在dev
环境中,无需动态传递资产,因此缓存问题的解决方案也应该适用于此。
答案 1 :(得分:0)
我使用SVN,repo在我们的服务器上,网站是一个checkout文件夹,设计师也有一个checkout文件夹。
制作一个可以制作svn update .
和cache:clear
有了这个,你可以授予他访问权限和控制权的权限。 您可以隐藏参数,服务和实体。
这肯定不是生产,而是集成服务器
答案 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
。