在RubyGem中,是否可以用其他语言编写可执行文件?
我有一个gem,它在在RubyGem中,是否可以用其他语言编写可执行文件?,ruby,rubygems,Ruby,Rubygems,我有一个gem,它在bin/中有一个可执行文件。在gemspec中使用通配符: s.executables = Dir["bin/*"].map &File.method(:basename) 如果我在bin/my_file中有一个ruby文件,它运行了chmoda+x,那么它可以在bash中的路径中找到: #!/usr/bin/env ruby puts "working ruby script" 但是,我在bin/my_file.coffee中有另一个用coffeescript编
bin/
中有一个可执行文件。在gemspec中使用通配符:
s.executables = Dir["bin/*"].map &File.method(:basename)
如果我在bin/my_file
中有一个ruby文件,它运行了chmoda+x
,那么它可以在bash中的路径中找到:
#!/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
,并捕获输出
另外,看看官方的解释:
RubyGems并不支持任意可执行文件
嗯。那么除了在herdoc中包装代码之外,还有其他选择吗
有没有一个很好的理由来解释这个限制?我想这仅仅是RubyGems规范中的一个问题:
你如何运行你的咖啡文件?如果您使用bundle exec
它当然会使用ruby。当我在shell中运行我的_file.coffee时,它会尝试使用ruby而不是coffeescript读取此脚本。
这没有意义。当您在bin中时,my_file.coffee
具有u+x
并且您运行/my_file.coffee
,会发生什么?你的问题意味着Linux shell在执行过程中完全忽略了可执行文件顶部的shebang,这让我很难相信(类似于@EricDuminil所说的)。我想这里缺少一些信息。@marianseen我没有使用bundle exec。该文件位于bin/test.coffee
中,在我运行gem install
之后,正如预期的那样,它位于我的路径中,我可以在shell中说test.coffee
。@EricDuminil Ruby gems有一种发送可执行文件的方法,但除了Ruby之外,其他语言似乎不支持它。当我像/my_file.coffee
那样运行它时,它确实可以工作。但在分发gem时,使用相对路径是不起作用的。
+ # Executables included may only be ruby scripts, not scripts for other
+ # languages or compiled binaries.
+ #