2010-09-08 17 views
11

Wir haben eine Ruby-Anwendung, die auf einem Edelstein mit nativen Erweiterungen (in diesem speziellen Fall Nokogiri) abhängt. Aus verschiedenen Gründen können wir die Buildvoraussetzungen (wie build-essential, libxslt-dev, ruby-dev usw.) für dieses Juwel jedoch nicht auf unserem Produktionshost installieren.Wie kompilieren Sie die nativen Erweiterungen für einen Ruby-Edelstein für Linux vor?

Gibt es eine (Standard?) Möglichkeit, den Edelstein mit den vorinstallierten nativen Erweiterungen neu zu verpacken?

Es sollte möglich sein (es scheint ziemlich Standard, dies für Windows zu tun), aber ich kann keine Dokumentation zu diesem Thema finden.

Beachten Sie, dass wir nur eine einzige Plattform mit bekannten Versionen aller Systembibliotheken (Ubuntu 9.04 Server 64 bit, Ruby 1.8.7) unterstützen müssen.

UPDATE: Wir verwenden Bündler, so wollen wir noch einJuwel haben, am Ende des Tages zu installieren, kein Debian-Paket.

Antwort

17

Endlich gefunden einen Weg, dies für Edelsteine ​​zu tun, die rake-compiler für den Aufbau ihrer C-Erweiterungen verwenden (die meisten von ihnen).

benötigen Sie die folgenden auf einer Maschine zu tun, die auf die von Ihnen bereitstellen möchten identisch ist, oder es wird einfach nicht funktionieren:

Installieren Sie die Build-Voraussetzungen für die C-Erweiterungen Gebäude:

# apt-get install build-essentials ruby-dev # ... etc 
# gem install rake-compiler 

Packen Sie das Juwel Sie neu erstellen möchten:

$ gem unpack nokogiri 

Bauen Sie Ihre glänzende neue vorkompilierte Juwel:

$ rake native gem 

können Sie jetzt das native Juwel auf einer Maschine ohne Build-Tools installieren installiert:

$ gem install pkg/nokogiri-1.4.3.1-x86-linux.gem 
Successfully installed nokogiri-1.4.3.1-x86-linux 
1 gem installed 
+1

Ich werde einfach zu teilen, dass ich mehr Erfolg hatte die Überprüfung Ich habe das sparklemotion/nokogiri-Repository von github herausgebracht, bin zum versionierten Git-Tag für die Version gewechselt, die ich brauchte, und habe 'rake native edelstein Rob

+0

@Jacob können Sie bitte näher darauf eingehen? "Wechsel zum versionierten Git-Tag für die Version, die ich brauchte" – aragavan

-1

Build-Maschine

die richtig platformed Version für alle Ihre Edelsteine ​​bereits im Cache gespeichert haben, Paket alle Edelsteine ​​in vendor/cache auf einer identischen Maschine:

$ bundle package --all 

Prduction Maschine

Installieren Sie alle gem dependecies bereits im Cache gespeichert, die die korrekt platformed Version mit dem Edelstein-Cache haben erfordert:

$ bundle install --local --deployment 
+3

Dies kompiliert keine nativen Edelsteine. – Leo