小编Adr*_*ian的帖子

Laravel 4使用Puppet的Vagrant盒子的权限

我成功地使用http://www.puphpet.com为许多项目生成了vagrant + puppet环境.然后本周我的任务是使用Laravel 4为一个项目编写一个原型.由于我不打算成为那个全职工作项目的人,我认为最好为下一个项目创建一个VM环境.人只能克隆回购.没有太多使用Laravel 4的经验我在开发环境中运行得很好.然后我尝试运行第一次迁移,这里的问题从app/storage文件权限开始.

1. app/storage必须可由Web用户写入

好的,从同步文件夹配置中取出id:vagrant并将所有者和组设置为www-data,如下所示:

 config.vm.synced_folder "./www", "/var/www", owner: "www-data", group: "www-data"
Run Code Online (Sandbox Code Playgroud)

2.工匠只能从流浪者箱内运行才能进入DB

很好,vagrant ssh并从www文件夹运行工匠.

3. app/storage&app/database必须由vagrant用户写入才能使用迁移

Grrr,好的,将以下可怕的代码添加到vagrant文​​件中(注意,首先尝试在Puppet中执行此操作并且不执行此操作):

config.vm.provision :shell, :inline =>
  "usermod -a -G www-data vagrant"
Run Code Online (Sandbox Code Playgroud)

4. app/storage&app/database不能被组写入

哎呀!好吧,让我们试试这个Puppet指令:

file { "/var/www/app/storage":
  source => "/var/www/app/storage/",
  mode => 0775,
  ensure  => 'directory',
  owner   => 'www-data',
  group   => 'www-data',
  recurse => true
}
Run Code Online (Sandbox Code Playgroud)

不,不行.试图用Puppet exec {}指令做同样的事情没有效果.似乎vagrant synced文件夹的权限由主机设置,而不是guest.

最后,最终手动更改主机中文件夹的权限.有没有更简单的方法来做到这一点?我真的希望能够为下一个开发人员提供一个无忧无虑的环境,他们可以从回购中克隆,而不是让他们在克隆后重新设置一切.

UPDATE

我们已经发现,如果我们更改Apache运行用户,vagrant不会在重新加载时覆盖它.所以我们手动完成了它,它比更改同步文件夹的权限和所有者更好.现在我们只想弄清楚如何在Puppet中手动进行更改.

file-permissions puppet vagrant laravel laravel-4

14
推荐指数
2
解决办法
6918
查看次数

如何在Zend Framework 2中使用插件呈现自定义视图

我正在开发一个需要在流程完成后发送电子邮件的应用.由于电子邮件需要是HTML,我有一个明智的想法,即将视图呈现为电子邮件消息正文,以便我可以实现"单击此处以在浏览器上查看此内容"功能.这都是参与实现AbstractRestfulController的控制器,因此视图本身驻留在我的前端模块中,以便可以通过浏览器从URL访问它.但是我得到了一个

没有提供RouteStackInterface实例

我尝试渲染视图时出错.

这是我的代码:

use Zend\View\HelperPluginManager;
use Zend\View\Resolver;
use Zend\View\Renderer\PhpRenderer;

//Instantiate the renderer
$renderer = new PhpRenderer();
$resolver = new Resolver\TemplateMapResolver(array(
            'layout' => realpath(__DIR__ . '/../../../../Application/view/layout/email.layout.phtml'),
            'email/view' => realpath(__DIR__ . '/../../../../Application/view/application/email/view.phtml')
        )
    );
$renderer->setResolver($resolver);
$renderer->url()->setRouter($this->getEvent()->getRouter());
Run Code Online (Sandbox Code Playgroud)

我在API文档中看到,您可以通过为路由器提供RouteStackInterface将路由器设置为URL插件,因此最后一行.但是,这似乎也没有用.

我想使用相同的视图发送HTML邮件消息,该消息在邮件正文中有链接并通过URL显示在浏览器上.

有关如何完成此任务的任何想法/建议?

编辑/解决方案:

根据下面的dotwired的回答,从服务管理器获取渲染器的实例会导致插件正确实例化.所以这是有效的代码:

module.config.php:

array('view_manager' => array(
            'template_map' => array(
                    'layout/email'            => __DIR__ . '/../../Application/view/layout/email.layout.phtml',
                    'email/share'             => __DIR__ . '/../../Application/view/application/email/share.phtml',
                    'email/view'              => __DIR__ . '/../../Application/view/application/email/view.phtml',
            ),
    ),
);
Run Code Online (Sandbox Code Playgroud)

REST控制器:

use Zend\View\Model\ViewModel;

//get the renderer
    $renderer = $this->getServiceLocator()->get('Zend\View\Renderer\RendererInterface');

    //Create the views
    $shareView = new …
Run Code Online (Sandbox Code Playgroud)

php model-view-controller zend-framework2

5
推荐指数
1
解决办法
4387
查看次数