Cloud foundry 如何在自定义Cloud Foundry构建包中使用其他rubygems?

Cloud foundry 如何在自定义Cloud Foundry构建包中使用其他rubygems?,cloud-foundry,Cloud Foundry,我正在编写一个定制的java构建包,我希望能够编辑web.xml文件以添加一些必需的配置。但是,我似乎仅限于实例节点上存在的rubygems,它不包括任何XML解析库 如何让buildpack指定它需要额外的gem来执行?将gems添加到buildpack中的Gemfile本身,在暂存应用程序时似乎没有任何效果 或者,如何使用CF中可用的库存工具修改现有XML文件?我想避免使用正则表达式,但这可能是最后的选择。为此,您可以使用所有必需的库创建自定义堆栈(容器根fs) 为此,您可以使用所有必需的

我正在编写一个定制的java构建包,我希望能够编辑web.xml文件以添加一些必需的配置。但是,我似乎仅限于实例节点上存在的rubygems,它不包括任何XML解析库

如何让buildpack指定它需要额外的gem来执行?将gems添加到buildpack中的Gemfile本身,在暂存应用程序时似乎没有任何效果


或者,如何使用CF中可用的库存工具修改现有XML文件?我想避免使用正则表达式,但这可能是最后的选择。

为此,您可以使用所有必需的库创建自定义堆栈(容器根fs)


为此,您可以使用所有必需的库创建自定义堆栈(容器根fs)

但是,我似乎仅限于实例节点上存在的rubygems,它不包括任何XML解析库

对。当构建包在临时容器中运行时,它将使用容器提供的Ruby版本。这意味着您被锁定在特定版本的Ruby和容器提供的gems集合中

解决这个问题的唯一方法是使用一个引导shell脚本来下载Ruby,安装Gems,然后运行实际的构建包Ruby脚本。这是一个额外的工作和开销虽然很多,所以可能不是一个好的选择,如果你可以避免它

如何让buildpack指定它需要额外的gem来执行?将gems添加到buildpack中的Gemfile本身,在暂存应用程序时似乎没有任何效果

我认为这是不可能的。您不能安装
gem
something,因为它需要root访问权限,而您将无法获得该权限

相反,您可以在构建包中包含所需的依赖项。我们使用PHP构建包的YAML依赖项实现了这一点。如果您的依赖项都是Ruby代码(即没有本机代码),那么这应该可以正常工作

或者,如何使用CF中可用的库存工具修改现有XML文件?我想避免使用正则表达式,但这可能是最后的选择

这取决于你在做什么以及你需要改变什么

  • Regex搜索和替换是一个选项
  • 基本字符串搜索和替换是另一种方法
  • 您可以使用安装在环境中并能够解析/编辑XML的工具
  • 如果在安装Java之后的安装中发生这种情况,您可以运行一些Java代码
我不建议创建自定义堆栈。它具有难以置信的侵入性,意味着您需要继续提供所有更新(不是一项小任务),如果您要使用公共云提供商,它将不起作用,因为没有人允许您在其公共云中安装自定义堆栈

希望有帮助

但是,我似乎仅限于实例节点上存在的rubygems,它不包括任何XML解析库

对。当构建包在临时容器中运行时,它将使用容器提供的Ruby版本。这意味着您被锁定在特定版本的Ruby和容器提供的gems集合中

解决这个问题的唯一方法是使用一个引导shell脚本来下载Ruby,安装Gems,然后运行实际的构建包Ruby脚本。这是一个额外的工作和开销虽然很多,所以可能不是一个好的选择,如果你可以避免它

如何让buildpack指定它需要额外的gem来执行?将gems添加到buildpack中的Gemfile本身,在暂存应用程序时似乎没有任何效果

我认为这是不可能的。您不能安装
gem
something,因为它需要root访问权限,而您将无法获得该权限

相反,您可以在构建包中包含所需的依赖项。我们使用PHP构建包的YAML依赖项实现了这一点。如果您的依赖项都是Ruby代码(即没有本机代码),那么这应该可以正常工作

或者,如何使用CF中可用的库存工具修改现有XML文件?我想避免使用正则表达式,但这可能是最后的选择

这取决于你在做什么以及你需要改变什么

  • Regex搜索和替换是一个选项
  • 基本字符串搜索和替换是另一种方法
  • 您可以使用安装在环境中并能够解析/编辑XML的工具
  • 如果在安装Java之后的安装中发生这种情况,您可以运行一些Java代码
我不建议创建自定义堆栈。它具有难以置信的侵入性,意味着您需要继续提供所有更新(不是一项小任务),如果您要使用公共云提供商,它将不起作用,因为没有人允许您在其公共云中安装自定义堆栈


希望有帮助

谢谢!非常有用,并且支持我今天通过更多测试发现的内容。我确定REXML包在临时容器中可用,并且能够编写一些基本代码来完成我想要的任务。出于好奇,我需要在web.xml文件的顶部插入一些自定义servlet过滤器,以确保它们在过滤器链中处于第一位。非常有用的评论,谢谢!不确定它在您的情况下是否有任何用处,但我注意到我们可以将java buildpack配置为使用外部Tomcat配置。谢谢!非常有用,并且支持我今天通过更多测试发现的内容。我确定REXML包在staging co中可用