如何在不指定路径的情况下运行ruby程序

时间:2015-08-08 05:27:30

标签: ruby ubuntu

我已经构建了我的程序并使用

安装了gem
$sudo gem install ./helloworld-0.0.1.gem 

现在我需要一个名为helloworld的命令,这样我就可以从文件系统的任何地方运行该程序。我需要能够产生以下输出的东西。

$helloworld
 hello world

gemspec文件如下。

Gem::Specification.new do |s|
  s.name               = "helloworld"
  s.version            = "0.0.1"
  s.default_executable = "helloworld"

  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
  s.authors = ["Suranga"]
  s.date = %q{2015-08-06}
  s.description = %q{Hello World}
  s.files = ["Rakefile", "lib/helloworld.rb"]
  s.test_files = ["test/test_helloworld.rb"]
  s.require_paths = ["lib"]
  s.rubygems_version = %q{1.6.2}
  s.summary = %q{Hello World!}

  if s.respond_to? :specification_version then
    s.specification_version = 3

    if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
    else
    end
  else
  end
end

我该怎么做?

2 个答案:

答案 0 :(得分:2)

default_executable setting is deprecated并且无论如何都没有指定可执行文件。您需要使用executables代替:

s.executables << "helloworld"

另请参阅Rubygems指南的adding an executable部分。

答案 1 :(得分:0)

假设默认设置。

使用rvm

首先,我建议您安装rvmhttp://rvm.io)。然后你就不需要sudo权限,可以在理智(测试,开发)环境中安装宝石。

使用工具准备宝石作品

其次,如果你计划实现一个gem,我建议你使用bundler(并且有许多可能很棒的替代方案)来为你提供一个基本的结构。如果被称为

bundle gem --bin helloworld

它将为您创建helloworld gem的草图,目录exe中的文件将在安装时放置在$PATH上,以便您可以调用它 (有关更多选项,请参阅bundle help gem)。我不喜欢新的目录名称(exe/曾经是bin/),但我发现,捆绑商生成的内容仍然是一个非常好的精简大纲。

在开发过程中,您会发现自己正在玩这样的游戏(然后它不会使用任何&#34;安装的&#34;版本的宝石)

bundle exec exec/helloworld

快乐的编码!