gem issue

T

Tim Pease

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".

Blessings,
TwP
 
T

Trans

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?

T.
 
T

Tim Pease

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 <sigh>.

TwP
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,483
Members
44,901
Latest member
Noble71S45

Latest Threads

Top