tar*_*eld 4 ruby rubygems command-line-interface network-service
我正在编写一个ruby gem,用户可以安装并使用命令行ruby工具与服务进行交互.您可以启动和停止服务(它将产生子进程).
我已经做了很多关于编写网络服务的最佳方法的研究,比如ØMQ/ EventMachine,我得到了如何创建一个Ruby gem,它将安装一个你可以在命令行中使用的二进制文件,但我'努力建立一个良好的代码结构.
我的命令行实用程序将采用各种参数(我将使用Trollop)并且它将使用各种类来执行操作,并使用各种其他ruby gem.
我不确定我应该把我的类文件放在哪里,以及如何在我的二进制文件中要求它们以便路径是正确的.
很大程度上,RubyGems将为您解决这个问题.您需要在files
列表中包含可执行文件,并将其放在executables
gemspec中.将可执行文件放在bin
目录中是很常见的,例如:
$ ls
bin/ myapp.gemspec lib/ Rakefile
$ ls bin
bin/myapp
Run Code Online (Sandbox Code Playgroud)
您的gemspec将如下所示:
Gem::Specification.new do |s|
s.name = 'myapp'
# whatever else is in your gemspec
s.files = ["bin/myapp","lib/myapp.rb"] # or whatever other files you want
s.executables = ["bin/todo"]
end
Run Code Online (Sandbox Code Playgroud)
此时,当用户通过RubyGems安装您的应用程序时,myapp
将在他们的路径中,并且lib
将在您的应用程序的加载路径中,因此您的可执行文件可以简单地从以下开始:
#!/usr/bin/env ruby
require 'myapp'
# whatever other requires
Run Code Online (Sandbox Code Playgroud)
唯一的问题是,在开发过程中,您不能只执行bin/myapp
并运行您的应用程序.有些开发人员通过$:
或操纵负载路径$LOAD_PATH
,但这被认为是不好的形式.
如果您使用的是捆绑包,最简单的方法是在本地运行您的应用程序bundle exec
,例如bundle exec bin/myapp
.您可以交替使用RUBYLIB
环境变量,例如RUBYLIB=lib bin/myapp
,它将放入lib
加载路径.
归档时间: |
|
查看次数: |
2154 次 |
最近记录: |