2012-05-16 56 views
3

經過多年的遠離Ruby之後,我回到了全力以赴,並且剛剛削減了我的第一個包含可執行文件的gem。一切都像一個魅力。安裝系統服務的方法實現爲Ruby gem

但是,我面臨的問題是,我還有一個啓動腳本(不是gem istelf的一部分),它將守護程序守護進程。另外,我還想讓啓動腳本將配置文件指向/ var/

這樣的地方,據我所知,rubygems,gemspec等沒有辦法指定文件獲取在安裝過程中被吹到你的系統的其他部分(例如啓動腳本到/etc/init.d,配置到/ var /)。如果你能做到這一點,那肯定沒有意義。

所以...我的問題是...什麼是適當的過程來自動安裝這樣的東西。我正在使用RHEL,並且想知道是否也許是時候讓我的第一個RPM成爲我的腳了。

有什麼想法?

+1

的可能的複製[?我怎樣才能讓一個Ruby gem包文件拷貝到任意位置(http://stackoverflow.com/questions/367377/how-can-i-make-a-ruby-gem-package-copy-files-to-arbitrary-locations) – x1a4

回答

2

可以做到這一點。但它可能不是推薦的方法。但是,可以使用extensions選項在安裝gem期間運行任意代碼。

RubyGems Manual

Usage 
    spec.extensions << 'ext/rmagic/extconf.rb' 

Notes 
These files will be run when the gem is installed, causing the 
C (or whatever) code to be compiled on the user’s machine. 

任何Ruby代碼,你需要進入extconf.rb(或同等學歷)文件只是地方。從RubyGems的指南建立C-擴展

例子:
http://guides.rubygems.org/c-extensions/

+0

我可以看到爲什麼不推薦這樣做。對於需要編譯本機擴展的情況,這似乎很實用。對於應該修改啓動行爲的安裝過程來說,這似乎不太實際。無論如何,這樣的事情需要由root或者sudoer來完成。如果有人得到一個更猶太人的方法,仍然會喜歡的例子。 –

+1

@KentRancourt - 如果你看看RubyGems包本身(下載源代碼),你會看到它包含一個'setup.rb'文件。這是我在許多情況下看到的。即「標準」ruby方法是在ruby包上運行'ruby setup.rb'。這相當於來自C源世界的'「./configure; make install」'。接下來是創建一個RPM包,就像你已經在考慮的那樣。 – Casper

+0

謝謝!這些信息讓我走上正軌。非常感激! –