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 updatejest 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.)
--forcezastępuje Gemfile
bundle exec rails new...uruchomiłem wersję railsokreśloną w Gemfile, która kończy się
gem 'rails', '5.0.0.1' >> Gemfilei po uruchomieniu bundle exec rails newz 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 --forceflagi) i zamiast instalować pakiet ( --skip-bundle) zaktualizuj go ręcznie:
$ bundle exec rails new . --force --skip-bundle
Jeśli Gemfilezaznaczysz 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_VERSIONzmienną config/environment.rbi 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