2012-04-09 15 views
1

Ich schreibe eine IDE in Ruby, und ich bin ratlos darüber, wie alle meine Dateien erhalten "erforderlich", wenn ich das Programm in der Befehlszeile ausführen, UND wenn es als installiert ist Rubygem.

Mein Rubygem hat eine ausführbare Datei namens "vr" drin. Ich muss diese "vr" ausführbare Datei machen, die alle anderen Dateien von meinem Projekt benötigt.

Wenn ich entwickle, ist es einfach, alle meine Projektdateien zu verlangen. Ich benötige einfach einen relativen Pfad zu ihnen wie folgt:

require_all Dir.glob(File.expand_path(File.dirname(__FILE__)) + "/../bin/**/*.rb") 

Der require_all Edelstein wird perfekt funktionieren. Allerdings bekomme ich ein großes Problem, wenn ich dieses Programm als Rubygem installiere. Als mein „vr“ ausführbar rubygems installiert ist, kopiert es die „vr“ ausführbar in ein spezielles Verzeichnis:

/home/eric/.rvm/gems/ruby-1.9.3-p125/bin 

Dieses Verzeichnis völlig von meinem Projekt Stammordner getrennt ist. Und so werden alle meine Projektdateien nicht mehr von der "require" -Anweisung gefunden.

Rubygems macht dieses Verzeichnis für root mein Juwel des:

/home/eric/.rvm/gems/ruby-1.9.3-p125/visualruby-0.0.55 

Ich brauche alle in der Lage sein „verlangen“ die Dateien aus dem Verzeichnis in meinem Projekt.

Meine bisherige Lösung besteht darin, eine zweite Datei namens "visualruby.rb" zu erstellen, die sich im lib-Ordner meines Projekts befindet. Es enthält die Anweisung require_all, um alle Projektdateien zu erfordern. Dann muß ich nur die ausführbare Datei verknüpfen, indem Sie diesen Code zu meinem „vr“ ausführbare Datei:

base_file = File.dirname(__FILE__) + '/lib/visualruby.rb' 
if File.file?(base_file) 
    require base_file #load from project 
else 
    require 'visualruby.rb' #load from gem 
end 

Es ist notwendig, zu überprüfen, ob es eine Datei „visualruby.rb“ relativ zur aktuellen Datei mit dem Namen, weil wenn ich mich entwickle, wird es immer die installierte Version von "visualruby.rb" finden. Wenn ich also eine Datei ändere, hat sie keine Wirkung. Ich muss es zwingen, die Version von meinem Entwicklungsprojekt für Änderungen an der Arbeit zu laden.

Auch meine IDE erstellt Projekte von Grund auf neu, so wäre es schön, die allgemeine Lösung zu wissen. Ich hätte gerne ein konsistentes Projektdateisystem für alle Projekte, aber ich bin mir nicht sicher, ob das möglich ist. Ich hatte die allgemeine Lösung, eine Datei namens "requests.rb" für alle Projekte zu erstellen, aber ich glaube nicht, dass es funktionieren wird, weil für jedes Projekt der gleiche Dateiname zu $ ​​LOAD_PATH hinzugefügt wird.

Bitte helfen Sie mir zu verstehen, wie ich eine konsistente Dateistruktur erstellen kann, wo ich entwickeln kann, und Rubygems zu machen.

Antwort

0

fand ich die Antwort auf meine eigene Frage:

Das Problem war, dass ich meine rubygems wurde die Installation der rubygems API:

Gem::Installer.new(file_name) 

Diese syslinks erstellt, die meine Wege vermasselt. Es gibt eine Option Wrapper machen statt syslinks und das scheint der normale Weg zu sein, zu installieren:

Gem::Installer.new(file_name, :wrappers => true) 

Nun ist die ein Wrapper für mein Juwel des bin-Verzeichnis kopiert und verwendet es den richtigen Pfad. Jetzt kann ich eine universelle Datei haben, die zu einem Juwel gemacht werden kann. Und alles läuft in der Entwicklung und im Edelstein gleich.

Ein Happy End ...

Verwandte Themen