Antworten:
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
_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> '
Hier ist der Befehl, den ich normalerweise benutze:
rails _version_ new application_name
beispielsweise rails _2.1.0_ new my_app
Hier ist die Liste aller bisher verfügbaren Schienenversionen:
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
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 Gemfile
bundle exec rails new...
die rails
in der Gemfile angegebene Version ausgeführt wurde, die ersetzt wird.)
gem 'rails', '5.0.0.1' >> Gemfile
und nachdem ich bundle exec rails new
mit 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
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 --force
Flags) und --skip-bundle
aktualisieren 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
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.
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 in config/environment.rb
und geben Sie die Freeze-Rake-Aufgabe aus:
rake rails:freeze:gems
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