2010-11-22 2 views
21

Ich habe mehrere Apps, die ich einige gemeinsame Code teilen möchte. Ich würde gerne den Code schmücken und ihn so über die Apps teilen/versionieren, obwohl ich ihn nicht auf einem öffentlichen Edelstein-Server veröffentlichen möchte.Wie kann ich "private" Edelsteine ​​bereitstellen, auf die meine Apps zugreifen können, die aber niemand erhalten kann?

Was sind einige Optionen?

+4

Eine Option, auf die mich jemand sonst hingewiesen hat, ist, Bundler einfach auf ein Git-Repository zu verweisen (siehe http://gembundler.com/git.html). Ich müsste sicherstellen, dass dies mit einem privaten Git Repo getan werden kann. –

Antwort

9

Dies scheint vielversprechend:

https://github.com/cwninja/geminabox/

Obwohl ich es selbst nicht verwendet haben, so kann ich es nicht bürgen. Allerdings wurde es in einem Thread empfohlen, den ich kürzlich auf der offiziellen Rubygems Q & A-Website gelesen habe, wo erwähnt wurde, dass das eingebaute Rubygems-Hosting keine empfohlene Lösung ist und Geminabox als gute Alternative angeboten wurde.

Beachten Sie, dass es keine Authentifizierung oder Sicherheit bietet (außer durch Unklarheit, offensichtlich), je nachdem, wie empfindlich diese Edelsteine ​​sind, möchten Sie vielleicht etwas in sich hinzufügen (oder sogar nur Whitelist durch IP-Adresse).

+0

Danke - Ich habe gesehen, dass andere das auch empfehlen. –

+1

Geminabox unterstützt tatsächlich die HTTP Basic-Authentifizierung, die Sie natürlich in Ihrem Webserver Ihrer Wahl konfigurieren können. –

+0

In Bezug auf grundlegende Auth, habe ich eine schnelle Wiki-Seite auf eine einfache Lösung: https: // github.com/cwninja/geminabox/wiki/Http-Basic-Auth – cwninja

1

github bietet eine Reihe von privaten Repositories für eine geringe Gebühr.

+0

Kann ich von dort aus als Edelstein einsetzen? –

+0

Nun, viele Edelsteine ​​sind dort gespeichert, die wir täglich benutzen (wie zum Beispiel Geräte usw.), also muss es möglich sein, obwohl ich es nicht persönlich getestet habe. – Patrick

+0

Danke - Entschuldigung, aber ich wollte "aus einem privaten Repository als ein Juwel bereitstellen". Thnks! –

5

Mein Vorschlag dafür ist Bundler, eine private Git Repo und eine Git + Ssh Abhängigkeit. Das einzige Problem wird sein, dass Sie eine Möglichkeit finden müssen, die ssh-Schlüssel zu verwalten, da ich derzeit nicht glaube, dass Bundler ssh-Schlüssel zwischenspeichert. Möglicherweise können Sie die Syntax https://username:[email protected] .... style verwenden, aber ich habe es nicht versucht.

Vergessen Sie nicht, dass Sie immer die Möglichkeit haben, bundle package zum Verpacken Ihrer Edelsteine ​​für die Bereitstellung zu verwenden.

Ich hoffe, das hilft!

+0

Das sieht nach der besten Option aus, wenn ich mir einen Weg zum sicheren Zugriff auf das private Repository vorstellen kann. Ich bin mir nicht sicher, ob ich einen Benutzernamen/ein Passwort in die Gemfile einbetten möchte. –

+0

Ich sollte testen, ob ich das mit sshkeys machen kann. Danke - –

+0

Wenn der Server Zugriff hat, sollte es "nur funktionieren", aber wenn Sie zu etwas wie heroku bereitstellen, weiß ich nicht, wie Sie Ihre Schlüssel verwalten würden. In diesem Fall würde ich einfach alles verpacken. – jonnii

10

GemFury ist, was Sie suchen, denke ich.

+0

Das sieht sehr interessant aus, obwohl ich normalerweise nur meinen eigenen Geminabox-Server laufen lasse. –

+0

Es lohnt sich, GemFury zu betrachten, wenn du eine Menge Edelsteine ​​erstellst. Geminabox hat Leistungsprobleme, wenn die Dinge groß werden und Sie neu indizieren müssen. –

7

Der Weg dies zu tun ist durch Entpacken Ihres Edelsteins in das Vendor/Gems-Verzeichnis. Sie sagen dann Bundler, wo Sie es wie gewohnt mit Ihrer Gemfile finden.

Zuerst entpacken Sie den Edelstein in Vendor/Edelsteine. Ich nehme an, Sie haben das Juwel heruntergeladen und sitzen in einem offenen Verzeichnis vor Ihnen.

gem unpack your_gem.gem --target /path_to_rails_app/vendor/gems/. 

Jetzt ist Ihre Gemfile mit einer Zeile wie folgt aktualisieren:

gem 'your_gem', :path => "#{File.expand_path(__FILE__)}/../vendor/gems/your_gem" 

Schließlich verwenden Bündler es zu installieren und aktualisieren Sie Ihre Gemfile.lock

bundle install 

Sie haben nun eine lokale Kopie des Edelsteins, der in deiner Rails App installiert ist.

Sie können den Edelstein nun beliebig zwischen Ihren Apps teilen, indem Sie einen Symlink, ein Git-Submodul oder einen Teilbaum verwalten.

Verwandte Themen