首先,我知道按标题显示的时间必须是被问到的第400次,因此,我将尽最大努力使这段时间与众不同。
从现在开始(超过2年..),我们的团队为建立发展环境付出了很多努力。我们通常的设置是使用Fedora24-25 / Php-fpm / nginx / mariadb作为服务器。但是,由于必须使用某些程序,因此“必须”使用Windows。
当前场景
现在,我们正在使用VirtualBox / VMWare工作站来虚拟化Fedora并在其中运行我们的Symfony2应用程序。我不想在Windows上开发然后在Fedora中使用该应用程序进行生产的原因是由于拥有这两种不同的OS时出现的兼容性问题。
目前,一位开发人员(我)正在通过SMB将所有应用程序的文件夹共享到Windows中已安装的驱动器上,并在Windows上使用PHPStorm ..还告诉Symfony2将缓存/日志重定向到另一个文件夹,以便PhpStorm不必索引,到目前为止,对我来说,效果最好。
问题
问题出在我们需要进行开发时。.现在,我们正在使用PhpStorm处理Fedora,这意味着我们正在从VirtualBox中进行编码..因此,出于开发目的,Windows(又名主机)已经相当没用...因为我们在虚拟机上都运行了IDE和服务器。
话虽如此,但问题显然出在性能上,我们拥有相当不错的设置(带有SSD的HP Folio 9470m i7 16GB)..但是您仍然可以感觉到在VM上进行开发的开销和缓慢。 ..不用说,要在Windows和Linux之间切换就必须切换这些窗口,这一点很痛苦。
问题2:我们有3个显示器设置,这一点的重要性将在下一部分中介绍。
我尝试过的
通过这种方法,我获得的最佳结果是使用NFS。通常,在全新安装的Symfony2 2.8上,在安装了php-opcache的探查器上,您会获得大约50ms的响应时间。但是,使用CIFS或SMB急剧增加到大约500ms,使用NFS,我已经可以达到60ms左右。但是,有一个陷阱。.在Windows 10专业版上,无法自然使用NFS。必须升级到Enterprise,目前还不可行。
同样,为了能够使用这种方法,我不得不将symfony的cache /和logs /文件夹重定向到Fedora中的另一个文件夹。否则,使用已安装的文件夹,I / O会浪费60ms的响应时间。
使用这种方法,我遇到了完全相同的问题..这是一个非常常见的错误,由于卷就像共享卷,这在Google上出现了Symfony2和Docker缓慢的问题。.相同的I / O性能问题。
我以为这将是真正的交易...但是事实证明,我遇到了几个问题。.我已经使用Linux很长时间了,所以我知道如何使用Linux。
一种。我使用2副耳机...一个用于软电话,一个(耳塞)听音乐。.我无法让Fedora始终将一台设备用于软电话,将另一台设备用于其他应用程序...每次重新启动它时回去了..(不重要,没有这个可以活下去)
b。我在上面指定的问题#2中尝试了:Fedora,Linux Mint和Ubuntu,在尝试发行3个显示器时,在每个发行版中我都遇到了CRTC错误。
C。不提供HeidiSQL支持(可惜,但是我也可以不用它)
就NGINX / PHP / Symfony2而言,一切正常
同样的性能问题,但是这次是PhpStorm ..,因为文件是通过网络的事实bla bla bla bla ...
问题
基本上,我的明确问题是,每个人都将如何使用LINUX作为服务器并以Symfony2 / PHP作为语言/框架从Windows获得平稳的开发环境?
我很确定自己在这种情况下并不孤单,而且我研究的越多,问题就越多。
对不起,很长的问题!
我有两个实体。实体 A 是实体 B 的父级。我正在为实体 A 创建一个 REST,其中包含实体 B 作为子项。
class EntityA {
private $name;
private $type;
private $bs;
}
class EntityB {
private $entityA;
private $color;
}
Run Code Online (Sandbox Code Playgroud)
我基本上做了一个post/put类似的东西:
{ "name": "anamehere", "type": "atypehere", "bs": [{"color": "blue"}] }
Run Code Online (Sandbox Code Playgroud)
对于重要的部分,实体 A 的形式如下所示:
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name', TextType::class)
->add('type', TextType::class)
->add('bs', CollectionType::class, array(
'entry_type' => EntityB::class,
'allow_add' => true,
'allow_delete' => true,
'by_reference' => false,
));
$builder->addEventListener(FormEvents::SUBMIT, …Run Code Online (Sandbox Code Playgroud)