어떻게 해야 하는 구조 내의 루비 보석 명령행 서비스입니까?
-
10-12-2019 - |
문제
쓰고 있어요 루비 보석는 사용자가 설치하고 사용할 수 있습니다 명령 라인에 루비 툴과 상호 작용하는 서비스입니다.시작 및 중지할 수 있습 서비스(스폰을 떨어져 자식 프로세스).
나는 연구를 많이 수행으로 최고의 것을 사용하여 작성 네트워크 서비스 같은 ØMQ/EventMachine 고 나를 만드는 방법 루비 보석을 설치하는 바이너리에서 사용할 수 있는 명령행지만,나는 고군분투를 설정하는 좋은 코드는 구조입니다.
나의 명령 라인 유틸리티는 다양한 인수(사용 Trollop 고)사용하는 다양한 수업을 할 것,그리고 사용하는 다양한 기타 루비 보석입니다.
나는 확실하지 않다는 나을 클래스 파일을 요구하는 방법에 바이너리도록 경로 정확하다.
해결책
게 RubyGems 돌볼 것이다.해야 합 포함하는 실행 파일 files
목록에 넣고 executables
에서 당신의 gemspec.그것은 일반적인을 넣어서 실행 파일 bin
디렉토리에서,예를 들어:
$ ls
bin/ myapp.gemspec lib/ Rakefile
$ ls bin
bin/myapp
귀하의 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
이 시점에서,사용자가 설치를 통해 응용 프로그램 RubyGems, myapp
것에서 그들의 경로,그리고 lib
에있을 것입니다램의 loadpath,그래서 당신의 실행할 수 있는 단순히 함께 시작:
#!/usr/bin/env ruby
require 'myapp'
# whatever other requires
유일한 문제와 이는 동안,개발,수지 bin/myapp
귀하의 앱 실행됩니다.일요 조작하는 부하를 경로를 통해 $:
나 $LOAD_PATH
, 하지만 이것은 나쁜 형태로 간주.
를 사용하는 경우 번들러,그것의 쉬운 진행할 수 있도록 새 서비스는 지속적으로 함 bundle exec
, 예 bundle exec bin/myapp
.할 수 있습 교대로 사용 RUBYLIB
환경 변수,예를 들어, RUBYLIB=lib bin/myapp
, 어 lib
에서 하중을 지탱하게 됩니다.
다른 팁
"Nofollow"> Bundler 와 함께 보석 프로젝트 구조를 생성 할 수 있습니다.
간단히 :
bundler
.
$ gem install bundler
Bundler를 사용하여 보석 프로젝트를 생성
.
$ bundle gem myapp
$ cd myapp
실행 파일 추가
.
$ mkdir bin
$ cat > bin/mycommand << EOSCRIPT
#!/usr/bin/env ruby
require 'myapp'
puts "Executing myapp"
EOSCRIPT
$ chmod +x bin/mycommand
보석을 설치
.
$ rake install
스크립트 실행
.
$ mycommand
Executing mycommand
rubygems.org에서 유틸리티를 공유
.
$ rake release
더 많은 문서에서 웹 사이트
모든 보석이 자연에 의해 오픈 소스이기 때문에 언제든지 더 나은 것들을 볼 수 있습니다.jeweler
또는 hoe
와 같은 GEM Builder를 사용하여 조직적으로 말하기 기본 구조 중 일부를 설정합니다.