Odpowiedzi:
Znalazłem tutaj nieudokumentowaną opcję tworzenia nowej aplikacji przy użyciu starszej wersji Railsów.
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
<główny> '
Oto polecenie, którego normalnie używam:
rails _version_ new application_name
na przykład rails _2.1.0_ new my_app
Oto lista wszystkich dostępnych dotychczas wersji szyn:
Miałem problemy z używaniem rails _version_ new application_name
(wynikowy projekt był nadal generowany dla najnowszej wersji zainstalowanej wersji Rails).
Po trochę kopanie znalazłem artykuł przez Michaela Trojanek z alternatywnego podejścia. Działa to poprzez utworzenie folderu z Gemfile określającym pożądaną wersję Railsów, a następnie użycie go bundle exec rails...
, aby Bundler zajął się uruchomieniem odpowiedniej wersji rails
. np. aby stworzyć nowe projekty Railsowe 4.2.9, kroki są następujące:
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
, zaktualizuje również szyny !!
bundle update
jest potrzebny, ponieważ używana jest ręczna aktualizacja ( --skip-bundle
). Szyny nie zostaną zaktualizowane, ponieważ określona wersja jest podana w Gemfile (w przykładzie 4.2.9.)
--force
zastępuje Gemfile
bundle exec rails new...
uruchomiłem wersję rails
określoną w Gemfile, która kończy się
gem 'rails', '5.0.0.1' >> Gemfile
i po uruchomieniu bundle exec rails new
z opcją --force jest gem 'rails', '~> 5.0.0', '>= 5.0.0.1'
w Gemfile. Teraz, kiedy uruchamiam bundle update
, aktualizuję szyny do 5.0.4 (w Gemfile.lock), ale spodziewałem się, że będę używać szyn w wersji 5.0.0.1
Jak słusznie zauważył @mikej dla Railsów 5.0.0 lub nowszych , powinieneś wykonać następujące kroki:
Utwórz katalog dla swojej aplikacji wraz z plikiem Gemfile, aby określić żądaną wersję Railsów i pozwól, aby bundler zainstalował zależne klejnoty:
$ mkdir myapp
$ cd myapp
$ echo "source 'https://rubygems.org'" > Gemfile
$ echo "gem 'rails', '5.0.0.1'" >> Gemfile
$ bundle install
Sprawdź, czy zainstalowano poprawną wersję szyn: $ bundle exec rails -v
Teraz utwórz aplikację, pozwól Railsom utworzyć nowy plik Gem (lub raczej zastąp istniejący plik przy użyciu --force
flagi) i zamiast instalować pakiet ( --skip-bundle
) zaktualizuj go ręcznie:
$ bundle exec rails new . --force --skip-bundle
Jeśli Gemfile
zaznaczysz wpis dla szyn w , powinno to wyglądać tak:
gem 'rails', '~> 5.0.0', '>= 5.0.0.1'
Powinieneś zaktualizować go dokładnie do wersji wymaganej dla aplikacji:
gem 'rails', '5.0.0.1'
Teraz ostatni krok:
$ bundle update
Powinieneś także rzucić okiem na „zamrażanie” klejnotów Railsów w aplikacji. To bardzo pomaga we wdrożeniu, szczególnie w dzielonych środowiskach hostingowych.
Wystarczy zmienić RAILS_GEM_VERSION
zmienną config/environment.rb
i wykonać zadanie zamrażania prowizji:
rake rails:freeze:gems
Istnieją dwa sposoby na osiągnięcie tego:
jeden zgodnie z sugerowaną odpowiedzią:
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
alternatywną metodą jest utworzenie pliku gem z pożądaną wersją szyn przed zainicjowaniem projektu szyn
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
Pisałem o tym szczegółowo w moim artykule