Określanie wersji szyn, która ma być używana podczas tworzenia nowej aplikacji

227

Mam dwie wersje szyn (2.1.0 i 2.2.2) zainstalowane na moim komputerze.

Czy podczas tworzenia nowej aplikacji można określić, że chcę używać starszej wersji (2.1.0)?

hektorsq
źródło

Odpowiedzi:

503

Znalazłem tutaj nieudokumentowaną opcję tworzenia nowej aplikacji przy użyciu starszej wersji Railsów.

rails _2.1.0_ new myapp 
hektorsq
źródło
1
Powinieneś zmienić to na zaakceptowaną odpowiedź, ponieważ działa ona dla Rails 2 i 3. Odpowiedź Keltii nie będzie działać, jeśli masz zainstalowany Rails 3 i potrzebujesz aplikacji Rails 2.
Peter Brown
Błąd, że zainstalowanie Rails 3 kończy się niepowodzeniem w wersji 2.3.5 - Właśnie przetestowałem na Mac OS X Snow Leopard z zainstalowanymi modułami: szyny (3.0.5, 2.3.5, 2.2.2, 1.2.6)
Mike
13
To jest funkcjonalność RubyGems, a nie funkcjonalność Rails; dlatego nie jest zależny od wersji Rails i będzie działał dla innych klejnotów. (Dzięki, to świetna odpowiedź!)
Calrion
2
Podczas używania wersji 3.1.3 pojawia się błąd, gdy są zainstalowane wersje 3.1.3 i 3.2.0.rc1. Oto błąd --- [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 <główny> '
Ninad
Bardzo pomocne, gdy 4.0.0 jest już dostępne!
Jason
67

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:

http://rubygems.org/gems/rails/versions

Hardik
źródło
26

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
mikej
źródło
Nie sądzę, że jest taka potrzeba bundle update, zaktualizuje również szyny !!
Rajkaran Mishra
@devel 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.)
mikej
--forcezastępuje Gemfile
Rajkaran Mishra
Tak, ale nowy Gemfile, który jest zapisywany, nadal określa wersję Railsów, której chcieliśmy (ponieważ bundle exec rails new...uruchomiłem wersję railsokreśloną w Gemfile, która kończy się
wymianą
1
Zrobiłem to 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
Rajkaran Mishra
9

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
Rajkaran Mishra
źródło
3

Możesz wygenerować szkielet w dowolnej wersji i wymagać tego, który chcesz 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

lub użyj polecenia „rails” z żądanej wersji.

Keltia
źródło
3

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
Thiago Arrais
źródło
użyj rvm użyj rubyversion
Apoorv 26.04.16
1

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

Prakash
źródło