Ich bin ziemlich neu in Bundler und Capistrano und versuche, sie zusammen zu verwenden. Wenn ich versuche bereitzustellen, wird folgende Meldung angezeigt:
Sie versuchen, im Bereitstellungsmodus zu installieren, nachdem Sie Ihre Gemfile geändert haben. Führen Sie die Bundle-Installation an einer anderen Stelle aus und fügen Sie die aktualisierte Datei Gemfile.lock zur Versionskontrolle hinzu.
Ich weiß nicht, wie ich das System befriedigen soll, das sich beschwert, und ich verstehe nicht, warum die Beschwerde auftaucht, weil ich im Dokument gelesen habe :
Wenn eine Gemfile.lock vorhanden ist und Sie Ihre Gemfile (5) aktualisiert haben, verwendet der Bundler die Abhängigkeiten in der Gemfile.lock für alle Gems, die Sie nicht aktualisiert haben, löst jedoch die Abhängigkeiten der Gems, die Sie aktualisiert haben, erneut auf . Weitere Informationen zu diesem Aktualisierungsprozess finden Sie unten unter KONSERVATIVES UPDATING.
Ich interpretiere das so, dass der Bundler damit umgehen kann, dass mein Gemfile nicht das ist, was er erwartet hat. Irgendeine Hilfe?
Technische Daten: Ruby 1.9.3, Rails 3.2.3, Capistrano 2.12.0, Bundler 1.1.4, Windows 7, Bereitstellung auf einem Posix-Computer.
Bearbeiten: Meine Gemfile enthält Logikblöcke wie die folgenden:
unless RbConfig::CONFIG['host_os'] === 'mingw32'
# gem 'a' ...
end
quelle
unless RbConfig::CONFIG['host_os'] === 'mingw32'
? (Ergo sollte es andere Elemente auf meinem Windows-Computer als auf dem Linux-Server bündeln.):platforms
Flags für die Edelsteine, die mein Prod (Posix) -Server benötigte, die sich aber nicht auf meinem Dev (Win) -Server befanden, machte den Unterschied:platforms :ruby do; gem 'mygem'; ...; end
(Sie erhalten den grünen Scheck, wenn es Ihnen nichts ausmacht, diese Anweisung zu Ihrer Antwort hinzuzufügen.):require
, funktioniert gut zu stackoverflow.com/a/16475580/933358vi .bundle / config
Ändern Sie die Option BUNDLE_FROZEN von '1' auf '0'.
"Bundle installieren"
ODER
Führen Sie "bundle config" aus.
Überprüfen Sie, ob der Wert "eingefroren" auf "wahr" gesetzt ist
Bundle-Konfiguration eingefroren false
quelle
bundle config frozen false
ist mein goto fix. Vielen Dank, zwei Jahre später! Ich glaube, die Antwort von Joshua Pinter spricht den obigen Kommentar an - es kann die globale Bundler-Konfiguration sein, die dies beeinflusst.bundle config frozen false
habe nichts für mich getan. Es wurde auf die Bearbeitung von .bundle / config zurückgegriffen, in der der Eintrag BUNDLE_FROZEN = "true" (Text true)Achten Sie auf die globale Bundler-Konfiguration.
Ich hatte eine globale Konfiguration in meiner Entwicklungsumgebung
~/.bundle/config
, die ich in meiner CI / Produktionsumgebung nicht hatte, was dazu führte,Gemfile.lock
dass sich die in meiner Entwicklungsumgebung generierte Konfiguration von der in meiner CI / Produktionsumgebung unterschied.In meinem Fall habe ich
github.https
in meiner Entwicklungsumgebung auf true gesetzt, aber in meiner CI / Production-Umgebung keine solche Konfiguration gehabt. Dies führte dazu, dass die beidenGemfile.lock
Dateien unterschiedlich waren.quelle
Wenn Sie Folgendes sehen ...
... Dann ist das Problem höchstwahrscheinlich, dass Sie veraltete .gem-Dateien in Ihrem Vendor / Cache-Verzeichnis haben.
Vielleicht haben Sie zuvor
$bundle install --deployment
einige "veraltete" .gem-Dateien in den Cache gestellt?In jedem Fall können Sie diesen Fehler umgehen, indem Sie Folgendes ausführen:
bundle install --no-deployment
Das ist eines der vielen großartigen Dinge an Rails ... Die Fehlermeldungen sagen Ihnen oft genau, was Sie tun müssen, um das Problem zu beheben.
quelle
Die Lösung war für mich etwas anders als die anderen hier aufgeführten. Ich habe versucht, ein Upgrade von sidekiq auf sidekiq-pro durchzuführen (für das Bundler 1.7.12+ erforderlich ist), aber ich habe immer wieder die Meldung "Sie versuchen, im Bereitstellungsmodus zu installieren, nachdem Sie Ihre Gemfile geändert haben" von travis-ci erhalten
Die Überprüfung der Konsolenausgabe von travis-ci ergab, dass eine ältere Version von Bundler verwendet wurde.
In meinem Fall musste ich die Datei travis.yml bearbeiten, um Folgendes hinzuzufügen:
before_install: - gem update bundler
Dies zwang travis-ci, die neueste Version von Bundler zu verwenden, und ließ die Fehlermeldung verschwinden.
quelle
cap shell
undgem update bundler
oderwith <role> gem update bundler
oderon <machine> gem update bundler
Mein spezifisches Problem hing mit dem zusammen, was von @JoshPinter gemeldet wurde, dh mit Abweichungen zwischen Entwickler und Bereitstellungshost im Protokoll, das vom Bundler zum Abrufen von Edelsteinen aus Github verwendet wurde.
Um es kurz zu machen, ich musste nur den folgenden
Gemfile
Eintrag ändern ...... zu dieser sicheren Syntax ( siehe Referenz ):
Und meine Bereitstellungen sind wieder normal.
quelle
Es ist mir egal. Das habe ich getan. Es hat es behoben.
quelle
Das Problem wurde für mich behoben.
quelle
Ich bin schon einmal auf etwas Ähnliches gestoßen. Ich denke, eine Möglichkeit, das Problem zu beheben, aber möglicherweise mehr Speicherplatz auf Ihrem Server beansprucht, als Sie möchten, ist das Ausführen
und versuchen Sie dann, bereitzustellen. Dies funktioniert so etwas wie die Installation all Ihrer Edelsteine im Lieferantenordner, was meiner Meinung nach im Allgemeinen gut zu vermeiden ist ... aber wahrscheinlich trotzdem funktionieren wird. Meine App hat sich früher so verhalten. Meine Lösung bestand darin, genaue Versionen zu entfernen, die in meiner Gemfile heruntergeladen werden sollten, und sie dann neu zu bündeln und bereitzustellen.
zu
Oder Sie können das tun, was es vorschlägt, und Ihr Projekt vom Produktionsserver auf einen lokalen Computer übertragen, bündeln und dann erneut auf Ihren Server übertragen. Diese Lösung ist möglicherweise nicht 100% korrekt, aber ein Teil davon hat bei mir funktioniert ... dachte nur, ich würde sie teilen. Viel Glück
quelle
--deployment
Flagge hat keinen Unterschied gemacht, es sei denn, ich habe Gemfile.lock gelöscht. Soll das so sein?Eine weitere Fehlerursache:
Das ist ein bisschen dumm, aber ich bin sicher, dass jemand anderes den gleichen Fehler machen wird.
Für Rails 4 hat Heroku den Edelstein Rails_12Factor hinzugefügt. Wenn Sie es verwendet haben, bevor sie es hinzugefügt haben, haben Sie diese beiden Edelsteine:
Sie müssen sie entfernen, wenn Sie die neue hinzufügen. (Sie sind enthalten). Ich denke, Sie können damit durchkommen, bis Sie die Zeilen in Ihrer Edelsteindatei berühren. Dann bemerkt Heroku die Duplizierung und schreit mit dem obigen Fehler.
Viel Glück mit Rails 4.
quelle
In unserem Fall haben wir eine Funktion verwendet, die in einer alten Version von Bundler, die auf unserer Produktionsmaschine ausgeführt wurde, nicht verfügbar war. Daher war es ausreichend, den Bundler zu aktualisieren, dh a
gem update bundler
.quelle
Dies mag eine gefährliche Idee sein, aber wenn Sie unbedingt etwas in einer Produktionsbereitstellungsumgebung testen müssen, können Sie die .bundle / config-Datei bearbeiten
Rufen Sie jetzt Bundle auf, in meinem Fall musste ich ein bestimmtes Juwel aktualisieren, also ist dies mein Befehl
Sie sollten es wahrscheinlich nach dem Update wieder ändern, damit die Dinge danach wie erwartet funktionieren. Auch dies wird wahrscheinlich nicht unterstützt und YMMV
quelle
Nach einigen Juwelen-Updates bin ich auf diese Bereitstellung einer Nesta-App gestoßen. Für mich hat es funktioniert , die Datei Gemfile.lock zu löschen, auszuführen , um
bundle install
sie neu zu generieren, und erneut bereitzustellen .quelle
Ich lief in ein ähnliches Problem aber ich tat beides
bundle install
undbundle update
und Heroku abgelehnt noch meinen Push.Ich habe das Problem behoben, indem ich Gemfile.lock gelöscht und dann
bundle install
erneut ausgeführt habe. Ich fügte dann hinzu, verpflichtete mich und schob das zu meinem Git-Repo. Danach hatte ich kein Problem damit, nach Heroku zu drängen.quelle
Für Heroku müssen Sie die Syntax in der nicht ändern
Gemfile
. Sie können einfachBUNDLE_GITHUB__HTTPS
eine Umgebungsvariable hinzufügen (beachten Sie den doppelten Unterstrich) und auftrue
(im Dashboard Ihrer Heroku-App unter derSettings
Registerkarte imConfig Vars
Abschnitt) setzen. Dadurch wird das Protokoll für alle derartigen Anforderungen vongit://
aufhttps://
umgeschaltet.quelle
Ich hatte die Fehlermeldung, als ich versuchte, nach Heroku zu pushen. Ich fand die folgende Lösung behoben.
quelle
Dieses Problem kann mit Submodulen zusammenhängen, die auf alte Codeversionen verweisen. Für mich habe ich dieses Problem durch Aktualisierung meiner Submodule behoben
Wenn Sie Submodule haben, versuchen Sie Folgendes auszuführen:
git submodule update --init
bundle install
quelle
Nach diesem Befehl können Sie Ihre normale Bundle-Installation erneut durchführen:
quelle
Ich habe ein Dutzend Lösungen zu verschiedenen Ressourcen gelesen, aber nicht genau gefunden, was mir in dieser Situation helfen könnte
Also habe ich eine Lösung gefunden. Genau gesagt, ich habe die Fehlermeldung aufmerksam gelesen und es gab eine Lösung: Führen Sie die Bundle-Installation an einer anderen Stelle aus . "Anderswo" war meine Cloud9, in der ich meine App entwickelt habe. Also meine Schritte
rsync
Befehlbundle install
. In diesem Fall haben Sie eine geänderte Version von Gemfile.lockrsync
bundle install --deployment --without development test
FERTIG ausführen! Wünsche allen viel Glück!quelle