最近,我一直致力于改善我的流浪环境,并且我偶然发现了Running the Symfony application on Vagrant without NFS below 100ms博客文章。
我已按照建议将vendor
dir移到VM共享目录之外,方法是在VM中创建/tmp/app/vendor
dir并设置
export COMPOSER_VENDOR_DIR=/tmp/app/vendor
export COMPOSER_BIN_DIR=/tmp/app/bin
export SF2_ENV=vagrant
运行composer install
之前的环境变量。
现在,在供应商正确安装到另一条路径的情况下,我已经修改了app/autoload.php
文件,通过查找SF2_ENV环境变量来检测应用程序是否在VM内运行:
if (array_key_exists('SF2_ENV', $_SERVER) && $_SERVER['SF2_ENV'] === 'vagrant') {
// vagrant enviroment detected
$loader = require sys_get_temp_dir().'/app/vendor/autoload.php';
} else {
// default
$loader = require __DIR__.'/../vendor/autoload.php';
}
这适用于一个项目,但是在另一个项目中我一直得到
尝试初始化应用缓存PHP致命错误:无法重新声明/var/www/public_html/vendor/gedmo/doctrine-extensions/lib/Gedmo/Loggable/Entity/MappedSuperclass/AbstractLogEntry.php中的类Gedmo \ Loggable \ Entity \ MappedSuperclass \ AbstractLogEntry 13
php app/console cache:clear -e=prod
时出现错误。
注意:我已经自己动手了,因为这是一个Q& A风格的问题(我未来的一个注释)。
答案 0 :(得分:1)
我发布此信息是为了提醒我未来的自己或其他任何感兴趣的人。问题是因为我使用Gedmo库的第二个项目和我定义的config.yml:
doctrine:
orm:
entity_managers:
default:
filters:
softdeleteable:
class: Gedmo\SoftDeleteable\Filter\SoftDeleteableFilter
enabled: true
mappings:
gedmo_translatable:
type: annotation
prefix: Gedmo\Translatable\Entity
dir: "%kernel.root_dir%/../vendor/gedmo/doctrine-extensions/lib/Gedmo/Translatable/Entity"
alias: GedmoTranslatable
is_bundle: false
所以,问题显然是%kernel.root_dir%
部分,它是硬编码的。
我只是将其更改为%vendor_dir%
并在我的parameters.yml
中定义了此参数 - 生产为vendor_dir: '%kernel.root_dir%/../vendor'
,本地(dev)为vendor_dir: /tmp/app/vendor
。
答案 1 :(得分:0)
我已经在Vagrant上遇到了symfony2项目的问题。但我解决了这个问题,没有更改/ vendor目录的位置。
只需禁用nfs共享并直接在/ var / www
上找到您的项目你可以在vagrantFile上使用它:
config.vm.synced_folder '.', '/vagrant', disabled: true
与您的Vagrant合作,就像使用远程服务器一样......
在生产环境中部署autoload.php文件时会发生什么?仅在开发环境中更改此功能并不是非常有用(我不会仅仅为此文件说话而是一般性的想法)。