在Ruby gem中,是否可以使用其他语言编写可执行文件?

时间:2016-12-18 06:33:54

标签: ruby rubygems

我有一个在bin/中有可执行文件的gem。 gemspec中使用了通配符:

s.executables = Dir["bin/*"].map &File.method(:basename)

如果我在bin/my_file有一个运行chmod a+x的ruby文件,那么它可以在bash的PATH中找到:

#!/usr/bin/env ruby
puts "working ruby script"

但是我在bin/my_file.coffee

的coffeescript中写了另一个可执行文件
#!/usr/bin/env coffee
console.dir "printing from coffee file"

当我在shell中运行my_file.coffee时,它会尝试使用ruby而不是coffeescript来读取此脚本。

如何按照预期使用coffeescript运行此可执行文件?

就目前而言,我正在使用一种解决方法,即将我的咖啡代码作为字符串包装在我的ruby应用程序中,然后将其传递给coffee -e并捕获输出。

此外,查看this RubyGems issue显示官方解释:

  

RubyGems并不意味着支持任意可执行文件。

行。除了在heredoc中包装代码之外还有其他选择吗?

这种限制是否有充分理由?

1 个答案:

答案 0 :(得分:1)

我想它只是在RubyGems的规范中:

https://github.com/zzak/rubygems/commit/709c5aae7ffd9958cc2ea89dc2caf6b7e02c56b7

+  # Executables included may only be ruby scripts, not scripts for other
+  # languages or compiled binaries.
+  #