我正在Symfony 2 WebApp上工作。WebApp已经上线两年了,现在我想更新一下设计。这项工作应该外包给第三方设计师。
设计师应该能够工作的WebApp的一个实时版本(=实际运行在我的服务器上,而不仅仅是普通的文件),使设计的变化变得可见,当刷新浏览器。因此,设计师需要能够直接在服务器上更改/添加文件,并在需要时刷新缓存,资产和样式(使用SASS + Compass)。
同时,设计器不应该具有对WebApp代码和服务器本身的一般访问权限。
只允许访问设计文件已经解决了:我已经将所有必要的文件/文件夹从Symfony安装移动到设计人员可以通过FTP访问的单独文件夹中。在Symfony安装中,文件/文件夹已被符号链接取代(参见我的问题)。
这个效果很好。唯一的问题是,目前缓存/资产/样式刷新目前只能通过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...
,但这样,该目录下的所有其他文件和文件夹也可以访问。
另外,我不确定,如果compass compile...
可以从HTTP运行。如何做到这一点?
我知道,在使用开发前端控制器(.../app_dev.php/...
)时,刷新缓存和资产并不是绝对必要的,但如果不能刷新/重新编译Compass和SASS文件,样式更改将不可见。
So:这可以通过HTTP完成吗?也许使用PHP调用的代理脚本?
要通过HTTP(S)公开这些命令,您可以为设计器添加一个调用控制器中的操作的路由来运行PHP命令,如文档中所述:
// 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
。
我认为最好隐藏尽可能多的东西,以便第三方更容易使用您的项目。因此我建议在后台自动处理。
因此:SASS -我会运行Gulp/Grunt
watch
任务服务器端,将在每次保存时重新编译SASS文件。这应该是流畅的。(我是少用户,但我想这在SASS工作几乎相同)cache:clear
-我建议你简单地关闭第三方将工作的实例上的缓存。有几种方法可以做到。您可以将app_dev.php
设置为入口点,而不是将app.php
设置为入口点,但是您应该关闭profiler。如果不想更改dev
,可以创建单独的环境。你也可以改变prod
的配置。assetic:dump
-我个人不喜欢Assetic,也不使用它,所以在这种情况下我可能是错的。无论如何,正如我在这里读到的,在dev
环境中,没有必要转储资产,因为它们是动态交付的,所以缓存问题的解决方案也应该在这里工作。
我使用SVN, repo在我们的服务器上,网站是一个结帐文件夹,设计师也有一个结帐文件夹。
创建svn update .
和cache:clear
的cron
这样,你可以只授予他对视图和控制器的访问权。你对他隐藏了参数、服务和实体。
这肯定不是在生产中,而是在集成服务器