我有以下设置:
-
symfony 2.7经典结构
-
依赖管理的composer
我需要做的是在parameters.yml中设置一个变量,该变量带有composer运行时的时间戳。
为此,我尝试了以下解决方案:
parameters.yml.dist
[bla bla bla]
ran_timestamp: ~
composer.json
[bla bla bla]
"scripts": {
"pre-install-cmd": [
"export SYMFONY_APP_DATE=$(date +"%s")"
],
}
"extra": {
"incenteev-parameters": {
"file": "app/config/parameters.yml",
"env-map": {
"ran_timestamp": "SYMFONY_APP_DATE"
}
}
}
在parameters.yml中设置变量的部分工作正常(该参数是使用SYMFONY_APP_DATE env变量中的值创建的(。
问题是运行composer时env变量没有更新。有人能帮我吗?
附加信息:
如果我在cli中手动运行预安装cmd中的命令,它可以正常工作(所以我认为命令本身是可以的(
我看到这个命令在composer中开始安装后运行,所以我认为它被执行了(输出如下(:
$composer安装
导出SYMFONY_APP_DATE=$(日期+"%s"(
使用包信息加载composer存储库[bla-bla]
未报告错误
我假设composer可能没有设置env变量的权限-不,不是这个。它与变量范围有关。
问题显然是在子进程(为每个脚本创建(中设置env参数,但不可能从子进程重新定义父进程的env参数(即从其脚本之一为composer本身设置env值(
我认为您需要扩展\Incentiev\ParameterHandler\ScriptHandler::buildParameters才能实现这一点。
UPD:我找到了一种实现的方法
只为composer.json 中的构建参数定义一个特殊块
"scripts": {
"build-params": [
"Incenteev\ParameterHandler\ScriptHandler::buildParameters"
],
并且在post-install-cmd
块而不是Incenteev\ParameterHandler\ScriptHandler::buildParameters
中使其
"export SYMFONY_APP_DATE=$(date +"%s") && composer run-script build-params"
这将在同一过程中创建env-var和构建参数