我希望拥有一个与另一个Gem具有相同可执行文件的Ruby Gem。
使用command args
调用时,它会执行某些操作,或将命令传递给其他Gem。
我遇到的第一个问题是它无法运行两个相同的命名可执行文件。我收到这个错误:
Bundler正在使用为不同的gem创建的binstub。这是不推荐使用的,在将来版本中,您可能需要bundle binstub yourgem
来解决系统/捆绑冲突。
如何让具有相同命名可执行文件的Gems并确保目标执行?
答案 0 :(得分:1)
您不能依赖Bundler或Rubygems来为您管理。它只是将您在gem规范中指定的可执行文件复制到其bin/
目录。
您遇到的第一个问题是运行的可执行文件可能取决于您无法保证安装宝石的顺序。
您遇到的另一个问题是您无法在gem安装上执行代码,因此您将无法运行代码来尝试为安装gem的人自动执行此设置。
我相信你的gem应该提供一个不冲突的可执行文件。然后,您可以在gem规范中提供显示给安装gem的用户,自述文件,博客文章等中的post install instructions。您可以告诉用户他们需要设置指向的别名可执行文件。在所有shell中,我知道别名将在文件系统可执行文件之前执行。
对于人们想要绕过你的别名并执行原始可执行文件的时候,你可以告诉人们逃避命令,例如\original-gem
。这绕过了大多数shell中的别名和函数查找,并允许用户将您的超级版本作为默认版本(通过别名)以及轻松访问原始版本的方式。