2012-05-16 31 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

谢谢!这些信息让我走上正轨。非常感激! –