wake-up-neo.com

Wie verwende ich Bundler mit einer Offline-Gem-Datei?

Für meine Anwendung muss ich verschlüsselte Zip-Dateien verarbeiten. Trotz ihrer schrecklich aussehenden Website scheint es, dass Chilkats kommerzielles Zip-Juwel wahrscheinlich der beste Weg ist, dies umzusetzen.

Da dies ein kommerzielles Juwel ist, haben sie es in keiner der typischen Juwelenquellen, die Bundler betrachtet. Ich konnte die Linux-64-Bit-Version des Gems unter Mac OS X installieren (obwohl ich noch nicht versucht habe, es auszuführen, also noch kein Word auf, wenn das tatsächlich funktionieren wird). Ich versuche jedoch zuerst, Bundler dazu zu bringen, den Edelstein aus der heruntergeladenen .gem-Datei zu erkennen und zu laden.

Bundler hat ein Pfadattribut , das ich auf verschiedene Arten verwendet habe, aber noch nicht zum Laufen gebracht habe:

  1. Ich habe versucht, mit path auf die .gem-Datei selbst zu verweisen, aber path erwartet ein Verzeichnis.
  2. Ich habe versucht, .gz am Ende der .gem-Datei einzufügen und zu extrahieren. Ich habe ein Verzeichnis mit einer data.tar.gz und einer metadata.gz darin erhalten. Der Pfad zum extrahierten Verzeichnis mit diesen beiden Dateien hat nicht funktioniert.
  3. Ich habe versucht, die Dateien data.tar.gz und metadata.gz zu extrahieren und die extrahierten Versionen in dem Verzeichnis abzulegen, auf das ich den Pfad verwies. Dies ist fehlgeschlagen.
  4. Mir ist aufgefallen, dass der Edelstein keine Gemspec-Datei hat - ich habe eine erstellt und sie in das Verzeichnis gestellt. Kein Glück.

Dies ist der Fehler, den ich erhalte:

$ bundle install
Fetching source index for http://rubygems.org/
Fetching source index for http://gems.github.com/
Could not find gem 'chilkat (>= 0, runtime)' in source at /Users/username/appname/vendor/cache/chilkat-9.1.0-x86_64-linux.
Source does not contain any versions of 'chilkat (>= 0, runtime)'

Irgendwelche Ideen, wie ich Bundler dazu bringen kann, zu sehen, dass sich der Edelstein tatsächlich in diesem Verzeichnis befindet? Andere Optionen als das Pfadattribut, die nicht zu funktionieren scheinen?

Danke vielmals!

33
shedd

Ich verwende Rails 3.0.3, neu in Rails 3 und Bundler.

Ich habe diesen Fehler mit:

gem 'mygem', :path => '/path/to/gem'

Durch die Angabe der Versionsnummer gelöst:

gem 'mygem', '0.0.1', :path => '/path/to/gem'

Die Verwendung von >=0.0.1 für die Version wurde auf den ursprünglichen Fehler zurückgesetzt. Ich kann das jedoch nicht erklären.

Zitat von JDs hilfreichem Kommentar aus der Gemfile-Manpage: "Ähnlich wie bei der Semantik der: git-Option erfordert die: path-Option, dass das betreffende Verzeichnis entweder eine .gemspec für den Gem enthält oder dass Sie eine explizite Version dieses Bündlers angeben sollte nutzen."

71
aceofspades

Versuchen Sie, den Edelstein auszupacken und dann den Pfad in Ihrem Gemfile zu verwenden.

d.h.

gem unpack my-gem-file.gem /my-Rails-app/vendor/gems/

dann füge eine Zeile wie so zu deinem Gemfile hinzu

gem 'my-gem', '0.0.1', :path => 'vendor/gems/my-gem'

Offensichtlich variieren die Pfade und Versionsnummern. Möglicherweise müssen Sie auch das Verzeichnis vendor/gems in Ihrem App-Stammverzeichnis erstellen, falls es noch nicht vorhanden ist.

10
semanticart

Kopieren Sie den gem in das vendor/cache-Verzeichnis im Stammverzeichnis Ihrer Anwendung.

bundle install --local

Dadurch wird das lokale Juwel installiert.

5
Indika K

Da dieser Edelstein für jeden Computer lokal ist, auf dem Sie Ihre App ausführen, geben Sie den Edelstein einfach in der Gemfile an und installieren Sie ihn manuell. Wenn Sie "Bundle Install" ausführen, wird der Bundler bereits installiert und fährt fort.

Dies funktionierte für mich bei der Installation einer Version von Ruby-debug-base19, die auf rubygems.org noch nicht verfügbar war.

Eine andere Möglichkeit wäre, einen eigenen Gem-Server einzurichten, auf den alle App-Server zugreifen können. Siehe http://guides.rubygems.org/run-your-own-gem-server/

Ich habe das selbst nie gemacht, aber es sieht sehr einfach aus. Stellen Sie nur sicher, dass Sie keine der Chilkat-Nutzungsbedingungen verletzen, wenn Ihr Gem-Server im Internet verfügbar ist.

0
Kelvin

Entpacke den Edelstein zuerst mit der Lösung von semanticart. Fügen Sie dann eine gemspec im unverpackten gem hinzu. Bundler kann ordnungsgemäß ausgeführt werden.

Gem::Specification.new do |s|
  s.name         = "chilkat"
  s.version      = "9.4.1"
  s.platform     = Gem::Platform::Ruby
  s.required_rubygems_version = ">= 1.3.6"
  s.files        = Dir.glob("lib/**/*")
  s.require_path = "lib"
  s.summary      = "Make do with a self written gemspec"
end
0
liangzan