Angabe der Rails-Version, die beim Erstellen einer neuen Anwendung verwendet werden soll


227

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?


Antworten:


503

Ich habe hier eine undokumentierte Option gefunden, um eine neue Anwendung mit einer älteren Version von Rails zu erstellen.

rails _2.1.0_ new myapp 

1
Sie sollten dies in die akzeptierte Antwort ändern, da dies für Rails 2 und 3 funktioniert. Die Antwort von Keltia funktioniert nicht mehr, wenn Sie Rails 3 installiert haben und eine Rails 2-App möchten.
Peter Brown

Fehlerhaft, dass die Installation von Rails 3 für 2.3.5 fehlschlägt - Gerade unter Mac OS X Snow Leopard getestet, wobei folgende Module installiert sind: Rails (3.0.5, 2.3.5, 2.2.2, 1.2.6)
Mike

13
Dies ist die RubyGems-Funktionalität, nicht die Rails-Funktionalität. Es ist daher nicht von der Rails-Version abhängig und funktioniert auch für andere Edelsteine. (Danke, das ist eine großartige Antwort!)
Calrion

2
Bei Verwendung von 3.1.3 wird eine Fehlermeldung angezeigt, wenn 3.1.3 und 3.2.0.rc1 installiert sind. Hier ist der Fehler --- [ninad @ localhost devel] $ rails _3.1.3_new sample_app /home/ninad/.rbenv/versions/1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems.rb:314:in bin_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> '
Ninad

Sehr hilfreich jetzt, da 4.0.0 raus ist!
Jason


26

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ührt rails. Um beispielsweise ein neues Rails 4.2.9-Projekt zu erstellen, sind die Schritte:

mkdir myapp
cd myapp
echo "source 'https://rubygems.org'" > Gemfile
echo "gem 'rails', '4.2.9'" >> Gemfile
bundle install

bundle exec rails new . --force --skip-bundle
bundle update

Ich glaube nicht, dass es nötig ist bundle update, es wird auch die Schienen aktualisieren !!
Rajkaran Mishra

@devel the bundle updatewird 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.)
Mikej

--forceüberschreibt die Gemfile
Rajkaran Mishra

Ja, aber die neue Gemfile, die geschrieben wird, gibt immer noch die Version von Rails an, die wir wollten (weil bundle exec rails new...die railsin der Gemfile angegebene Version ausgeführt wurde, die ersetzt wird.)
mikej

1
Ich habe es getan gem 'rails', '5.0.0.1' >> Gemfileund nachdem ich bundle exec rails newmit der Option --force ausgeführt habe, ist es gem 'rails', '~> 5.0.0', '>= 5.0.0.1'in Gemfile. Wenn ich jetzt laufe bundle update, werden die Schienen auf 5.0.4 (in Gemfile.lock) aktualisiert, aber ich hatte erwartet, die Schienenversion 5.0.0.1
Rajkaran Mishra

9

Wie 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:

$ mkdir myapp
$ cd myapp
$ echo "source 'https://rubygems.org'" > Gemfile
$ echo "gem 'rails', '5.0.0.1'" >> Gemfile
$ bundle install

Ü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 --forceFlags) und --skip-bundleaktualisieren Sie das Bundle ( ) manuell, anstatt es zu installieren :

$ bundle exec rails new . --force --skip-bundle

Wenn Sie den Eintrag für Schienen einchecken Gemfile, sollte dies folgendermaßen aussehen:

gem 'rails', '~> 5.0.0', '>= 5.0.0.1'

Sie sollten es auf die genaue Version aktualisieren, die für die Anwendung benötigt wird:

gem 'rails', '5.0.0.1'

Nun zum letzten Schritt:

$ bundle update

3

Sie können das Skelett mit beiden Versionen generieren und benötigen die gewünschte Version config/environment.rb:

# Specifies gem version of Rails to use when vendor/rails is not present
RAILS_GEM_VERSION = '2.1.2' unless defined? RAILS_GEM_VERSION

oder verwenden Sie den Befehl "Rails" für die gewünschte Version.


3

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_VERSIONVariable in config/environment.rbund geben Sie die Freeze-Rake-Aufgabe aus:

rake rails:freeze:gems

benutze rvm benutze rubyversion
Apoorv

1

Es gibt zwei Möglichkeiten, dies zu erreichen:

eine wie in der akzeptierten Antwort vorgeschlagen:

gem install rails -v 2.1.0 #only when the gem has not been installed in the desired ruby version you are using, so that you don't get error on next step
rails _2.1.0_ new my_app

Eine alternative Methode besteht darin, eine Gem-Datei mit der gewünschten Rails-Version zu erstellen, bevor das Rails-Projekt initialisiert wird

mkdir my_app
cd my_app
echo "source 'https://rubygems.org'" > Gemfile
echo "gem 'rails', '2.1.0'" >> Gemfile
bundle install

bundle exec rails new . --force --skip-bundle

Ich habe darüber ausführlich in meinem Artikel geschrieben

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.