Ich habe zwei Versionen von Schienen (2.1.0 und 2.2.2) auf meinem Computer installiert.
Kann ich beim Erstellen einer neuen Anwendung angeben, dass ich die ältere Version (2.1.0) verwenden möchte?
ruby-on-rails
hectorsq
quelle
quelle
Antworten:
Ich habe hier eine undokumentierte Option gefunden, um eine neue Anwendung mit einer älteren Version von Rails zu erstellen.
quelle
_3.1.3_
new sample_app /home/ninad/.rbenv/versions/1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems.rb:314:inbin_path': can't find gem railties (["3.1.3"]) with executable rails (Gem::GemNotFoundException) from /home/ninad/.rbenv/versions/1.9.2-p290/bin/rails:19:in
<main> 'Hier ist der Befehl, den ich normalerweise benutze:
beispielsweise
rails _2.1.0_ new my_app
Hier ist die Liste aller bisher verfügbaren Schienenversionen:
http://rubygems.org/gems/rails/versions
quelle
Ich hatte einige Probleme bei der Verwendung
rails _version_ new application_name
(das resultierende Projekt wurde immer noch für die neueste installierte Version von Rails generiert.)Nach einigem Graben fand ich einen Artikel von Michael Trojanek mit einem alternativen Ansatz. Dies funktioniert, indem ein Ordner mit einer Gem-Datei erstellt wird, in der die gewünschte Version von Rails angegeben ist, und diese dann verwendet wird,
bundle exec rails...
damit Bundler die entsprechende Version von ausführtrails
. Um beispielsweise ein neues Rails 4.2.9-Projekt zu erstellen, sind die Schritte:quelle
bundle update
, es wird auch die Schienen aktualisieren !!bundle update
wird benötigt, da ein manuelles Update verwendet wird (--skip-bundle
). Rails werden nicht aktualisiert, da eine bestimmte Version in der Gemfile angegeben ist (4.2.9 im Beispiel.)--force
überschreibt die Gemfilebundle exec rails new...
dierails
in der Gemfile angegebene Version ausgeführt wurde, die ersetzt wird.)gem 'rails', '5.0.0.1' >> Gemfile
und nachdem ichbundle exec rails new
mit der Option --force ausgeführt habe, ist esgem 'rails', '~> 5.0.0', '>= 5.0.0.1'
in Gemfile. Wenn ich jetzt laufebundle update
, werden die Schienen auf 5.0.4 (in Gemfile.lock) aktualisiert, aber ich hatte erwartet, die Schienenversion 5.0.0.1Wie von @mikej für Rails 5.0.0 oder höher zu Recht hervorgehoben, sollten Sie die folgenden Schritte ausführen :
Erstellen Sie ein Verzeichnis für Ihre Anwendung zusammen mit einer Gem-Datei, um die gewünschte Rails-Version anzugeben, und lassen Sie den Bundler die abhängigen Gems installieren:
Überprüfen Sie, ob die richtige Version der Schienen installiert wurde:
$ bundle exec rails -v
Erstellen Sie nun Ihre Anwendung, lassen Sie Rails ein neues Gemfile erstellen (oder überschreiben Sie das vorhandene mithilfe des
--force
Flags) und--skip-bundle
aktualisieren Sie das Bundle ( ) manuell, anstatt es zu installieren :Wenn Sie den Eintrag für Schienen einchecken
Gemfile
, sollte dies folgendermaßen aussehen:Sie sollten es auf die genaue Version aktualisieren, die für die Anwendung benötigt wird:
Nun zum letzten Schritt:
quelle
Sie können das Skelett mit beiden Versionen generieren und benötigen die gewünschte Version
config/environment.rb
:oder verwenden Sie den Befehl "Rails" für die gewünschte Version.
quelle
Sie sollten sich auch ansehen, wie Sie Ihre Rails-Edelsteine in der App "einfrieren". Dies hilft sehr bei der Bereitstellung, insbesondere in gemeinsam genutzten Hosting-Umgebungen.
Ändern Sie einfach die
RAILS_GEM_VERSION
Variable inconfig/environment.rb
und geben Sie die Freeze-Rake-Aufgabe aus:quelle
Es gibt zwei Möglichkeiten, dies zu erreichen:
eine wie in der akzeptierten Antwort vorgeschlagen:
Eine alternative Methode besteht darin, eine Gem-Datei mit der gewünschten Rails-Version zu erstellen, bevor das Rails-Projekt initialisiert wird
Ich habe darüber ausführlich in meinem Artikel geschrieben
quelle