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


Odpowiedzi:


503

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

rails _2.1.0_ new myapp 

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


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

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

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.


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

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.