From: Tim Pease Date: 2007-02-05T01:23:36+09:00 Subject: Re: gem issue On 2/3/07, Trans wrote: > > > On Feb 3, 4:38 pm, "Tim Pease" wrote: > > I'm working on Ruby program that will have a resource directory for > > storing configuration, logging information, etc. I've used the > > __END__ and DATA trick in my main ruby program to store some sane > > defaults for the resources directory if this is the first time the > > program has been run by a user. > > > > #!/usr/bin/env ruby > > > > require 'mylib' > > > > unless File.exist?(ENV['HOME'] + '.myrc') > > File.open(ENV['HOME'] + '.myrc/defaults', 'w') do |fd| > > fd.write DATA.readlines > > end > > end > > > > # use defaults here > > > > __END__ > > hash_key_1 : 1 > > hash_key_2 : 2 > > etc : and some more > > > > This works very well when my application is run directly. But when > > installed via gems a new ruby script is created that loads my > > executable script :( This causes the __END__ keyword in my ruby > > script to stop working, and the DATA constant is not set. > > > > Is there a way to tell the gem installer "Hey, quit being so smart and > > just install my executable file without wrappering it with your own > > ruby script". > > Something like: > > File.read(__FILE__).split("__END__").last > > But why not store it in a separate config file? > I'm trying to be clever in the way I bootstrap this config file into existence. Using __END__ and DATA seemed very Rubyish and clever. Alas that gems are smarter than I am. I just dumped it into a here doc in the file. Just as effective. There is a way to tell gem not to create a wrapper, but the user has to do it when they install the gem ... gem install --no-wrapper mygem However, gem is not honoring the executable bit in the file permission :/ So the symbolic link to my executable still does not work because the executable is no longer executable . TwP