我正在编写一个自定义的java-buildpack,我希望能够编辑web.xml文件以添加一些必需的配置。但是,我似乎仅限于实例节点上存在的rubygems,它不包含任何XML解析库。
如何让buildpack指定需要额外的gem才能执行?将gems文件添加到buildpack本身的Gemfile中并不会在暂存应用程序时产生任何影响。
或者,如何仅使用CF中可用的库存设施修改现有XML文件?我想避免使用正则表达式,但这可能是最后的手段。
答案 0 :(得分:2)
但是,我似乎仅限于实例节点上存在的rubygems,它不包含任何XML解析库。
正确。当您的构建包在登台容器中运行时,它将使用容器提供的Ruby版本。这意味着您将被锁定到特定版本的Ruby和容器提供的一组gem。
唯一的解决方法是使用一个bootstrap shell脚本来下载Ruby,安装你的Gems,然后运行实际的构建包Ruby脚本。这是一项额外的工作和开销,所以如果你能避免它,可能不是一个好的选择。
如何让buildpack指定需要额外的gem才能执行?在暂存应用程序时,将gems文件添加到buildpack本身的Gemfile中似乎没有任何效果。
我不认为这是可能的。你不能gem install
因为它需要root访问权限,你就不会有。{/ p>
您可以做的是在构建包中包含所需的依赖项。我们使用YAML依赖为PHP构建包做到了这一点。如果您的依赖项是所有Ruby代码(即没有本机代码),那么这应该可以正常工作。
或者,如何仅使用CF中可用的库存设施修改现有XML文件?我想避免使用正则表达式,但这可能是最后的手段。
这取决于你正在做什么以及你需要改变什么。
我不建议创建自定义堆栈。它具有令人难以置信的侵入性,意味着您需要提供所有未来的更新(不是一项小任务),如果您打算使用公共云提供商,这不会起作用,因为没有人会允许您安装您的公共云中的自定义堆栈。
希望有所帮助!
答案 1 :(得分:1)
您可以为此目的创建包含所有必需库的自定义堆栈(容器根fs)。
https://docs.cloudfoundry.org/devguide/deploy-apps/stacks.html