在我的私人 Symfony Flex 配方中,安装包时不会从配方中复制文件
On my private Symfony Flex recipe, files are not copied from the recipe when installing the bundle
我目前正在为极少数人发布一个 Symfony 包。这就是为什么我不认为有一天会出现在 https://github.com/symfony/recipes-contrib, so I used the Flex Private Recipe 文档上的原因。
我pushed the bundle on GitHub and created another one to store its recipe.
这是我的食谱:
{
"manifests": {
"edumedia/gar-api-bundle": {
"manifest": {
"bundles": {
"eduMedia\GarApiBundle\eduMediaGarApiBundle": [
"all"
]
},
"copy-from-recipe": {
"config/": "%CONFIG_DIR%"
},
"env": {
"GAR_DISTRIBUTOR_ID": "000000000_0000000000000000",
"GAR_SSL_CERT": "/path/to/cert.pem",
"GAR_SSL_KEY": "/path/to/cert.key"
}
},
"ref": "ad610a54abdf2f5563841a4ce4b3c3cb29a7d0ff"
}
}
}
在同一层,有一个config
目录,里面有一个配置文件:
# config/edumedia_gar_api.yaml
edumedia_gar_api:
distributor_id: '%env(GAR_DISTRIBUTOR_ID)%'
ssl_cert: '%env(GAR_SSL_CERT)%'
ssl_key: '%env(GAR_SSL_KEY)%'
remote_env: 'preprod'
cache_directory: '%kernel.cache_dir%/gar-cache'
但是,执行配方时没有复制任何内容。
在私人食谱上,文件不是从目录中复制的,而是从“食谱”本身复制的。
目录结构在将 Flex 配方提交到 Symfony 存储库时有效,但在创建私有配方时,文件内容需要 内联 在配方的 JSON.
例如:
{
"manifests": {
"edumedia/gar-api-bundle": {
"manifest": {
"bundles": {
"eduMedia\GarApiBundle\eduMediaGarApiBundle": [
"all"
]
},
"copy-from-recipe": {
"config/": "%CONFIG_DIR%"
},
"env": {
"GAR_DISTRIBUTOR_ID": "000000000_0000000000000000",
"GAR_SSL_CERT": "/path/to/cert.pem",
"GAR_SSL_KEY": "/path/to/cert.key"
}
},
"files": {
"config/packages/edumedia_gar_api.yaml": {
"contents": [
"edumedia_gar_api:",
" distributor_id: '%env(GAR_DISTRIBUTOR_ID)%'",
" ssl_cert: '%env(GAR_SSL_CERT)%'",
" ssl_key: '%env(GAR_SSL_KEY)%'",
" cache_directory: '%kernel.cache_dir%/gar-cache'",
" remote_env: 'preprod'"
],
"executable": false
}
},
"ref": "ad610a54abdf2f5563841a4ce4b3c3cb29a7d0ff"
}
}
}
手动创建此文件可能会很麻烦。所以通常更好的做法是创建一个 public 配方,具有完整的目录结构(包括供应商、包名和版本号的目录),并使用 Symfony 的工具生成完成食谱。
我在 this other answer 上描述了这个过程。
我目前正在为极少数人发布一个 Symfony 包。这就是为什么我不认为有一天会出现在 https://github.com/symfony/recipes-contrib, so I used the Flex Private Recipe 文档上的原因。
我pushed the bundle on GitHub and created another one to store its recipe.
这是我的食谱:
{
"manifests": {
"edumedia/gar-api-bundle": {
"manifest": {
"bundles": {
"eduMedia\GarApiBundle\eduMediaGarApiBundle": [
"all"
]
},
"copy-from-recipe": {
"config/": "%CONFIG_DIR%"
},
"env": {
"GAR_DISTRIBUTOR_ID": "000000000_0000000000000000",
"GAR_SSL_CERT": "/path/to/cert.pem",
"GAR_SSL_KEY": "/path/to/cert.key"
}
},
"ref": "ad610a54abdf2f5563841a4ce4b3c3cb29a7d0ff"
}
}
}
在同一层,有一个config
目录,里面有一个配置文件:
# config/edumedia_gar_api.yaml
edumedia_gar_api:
distributor_id: '%env(GAR_DISTRIBUTOR_ID)%'
ssl_cert: '%env(GAR_SSL_CERT)%'
ssl_key: '%env(GAR_SSL_KEY)%'
remote_env: 'preprod'
cache_directory: '%kernel.cache_dir%/gar-cache'
但是,执行配方时没有复制任何内容。
在私人食谱上,文件不是从目录中复制的,而是从“食谱”本身复制的。
目录结构在将 Flex 配方提交到 Symfony 存储库时有效,但在创建私有配方时,文件内容需要 内联 在配方的 JSON.
例如:
{
"manifests": {
"edumedia/gar-api-bundle": {
"manifest": {
"bundles": {
"eduMedia\GarApiBundle\eduMediaGarApiBundle": [
"all"
]
},
"copy-from-recipe": {
"config/": "%CONFIG_DIR%"
},
"env": {
"GAR_DISTRIBUTOR_ID": "000000000_0000000000000000",
"GAR_SSL_CERT": "/path/to/cert.pem",
"GAR_SSL_KEY": "/path/to/cert.key"
}
},
"files": {
"config/packages/edumedia_gar_api.yaml": {
"contents": [
"edumedia_gar_api:",
" distributor_id: '%env(GAR_DISTRIBUTOR_ID)%'",
" ssl_cert: '%env(GAR_SSL_CERT)%'",
" ssl_key: '%env(GAR_SSL_KEY)%'",
" cache_directory: '%kernel.cache_dir%/gar-cache'",
" remote_env: 'preprod'"
],
"executable": false
}
},
"ref": "ad610a54abdf2f5563841a4ce4b3c3cb29a7d0ff"
}
}
}
手动创建此文件可能会很麻烦。所以通常更好的做法是创建一个 public 配方,具有完整的目录结构(包括供应商、包名和版本号的目录),并使用 Symfony 的工具生成完成食谱。
我在 this other answer 上描述了这个过程。