Указание версии рельсов для использования при создании нового приложения

227

На моем компьютере установлены две версии направляющих (2.1.0 и 2.2.2).

Можно ли при создании нового приложения указать, что я хочу использовать более старую (2.1.0) версию?

hectorsq
источник

Ответы:

503

Я нашел здесь недокументированный вариант создания нового приложения с использованием более старой версии Rails.

rails _2.1.0_ new myapp 
hectorsq
источник
1
Вы должны изменить это на принятый ответ, так как он работает для Rails 2 и 3. Ответ Keltia больше не будет работать, если у вас установлен Rails 3 и вы хотите приложение Rails 2.
Питер Браун
Ошибочно, что установленный Rails 3 не работает для 2.3.5 - Только что протестирован на Mac OS X Snow Leopard с установленными этими модулями: rails (3.0.5, 2.3.5, 2.2.2, 1.2.6)
Майк
13
Это функциональность RubyGems, а не Rails; поэтому он не зависит от версии Rails и будет работать для других гемов. (Спасибо, это отличный ответ!)
Calrion
2
Я получаю ошибку при использовании 3.1.3, когда установлены 3.1.3 и 3.2.0.rc1. Вот ошибка --- [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 <main> '
Нинад
Очень полезно сейчас, когда вышла 4.0.0!
Джейсон
67

Вот команда, которую я обычно использую:

rails _version_ new application_name

например rails _2.1.0_ new my_app

Вот список всех доступных версий рельсов на данный момент:

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

Hardik
источник
26

У меня возникли некоторые проблемы при использовании rails _version_ new application_name(полученный проект все еще был сгенерирован для самой последней установленной версии Rails.)

После немного копать я нашел статью на Майкле Trojanek с альтернативным подходом. Это работает путем создания папки с Gemfile, указывающей желаемую версию Rails, и последующего ее использования, bundle exec rails...чтобы Bundler позаботился о запуске соответствующей версии rails. Например, чтобы создать новый проект Rails 4.2.9, необходимо выполнить следующие шаги:

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
источник
Я не думаю, что есть необходимость bundle update, это также обновит рельсы !!
Раджкаран Мишра
@devel bundle updateнеобходим, потому что используется обновление вручную ( --skip-bundle). Rails не будет обновлен, потому что в Gemfile указана конкретная версия (в примере 4.2.9.)
mikej
--forceперезаписывает Gemfile
Раджкаран Мишра
Да, но новый Gemfile, который записывается, все еще указывает версию Rails, которую мы хотели (потому что bundle exec rails new...запустил версию, railsуказанную в Gemfile, которая в итоге заменяется.)
mikej
1
Я сделал gem 'rails', '5.0.0.1' >> Gemfileи после запуска bundle exec rails newс параметром gem 'rails', '~> 5.0.0', '>= 5.0.0.1'--force , его в Gemfile. Теперь, когда я запускаю bundle update, он обновляет рельсы до 5.0.4 (в Gemfile.lock), но я ожидал использовать рельсы версии 5.0.0.1
Раджкаран Мишра
9

Как справедливо указано @mikej для Rails 5.0.0 или выше , вы должны выполнить следующие шаги:

Создайте каталог для вашего приложения вместе с Gemfile, чтобы указать желаемую версию Rails, и позволить bundler установить зависимые гемы:

$ mkdir myapp
$ cd myapp
$ echo "source 'https://rubygems.org'" > Gemfile
$ echo "gem 'rails', '5.0.0.1'" >> Gemfile
$ bundle install

Убедитесь, что установлена ​​правильная версия направляющих: $ bundle exec rails -v

Теперь создайте свое приложение, позвольте Rails создать новый Gemfile (или, скорее, перезаписать существующий, используя --forceфлаг), и вместо установки bundle ( --skip-bundle) обновите его вручную:

$ bundle exec rails new . --force --skip-bundle

Если вы проверите вход для рельсов Gemfile, это должно быть так:

gem 'rails', '~> 5.0.0', '>= 5.0.0.1'

Вы должны обновить его до точной версии, необходимой для приложения:

gem 'rails', '5.0.0.1'

Теперь последний шаг:

$ bundle update
Раджкаран Мишра
источник
3

Вы можете создать скелет с любой версией и потребовать ту, в которой вы хотите 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

или используйте команду "rails" из той версии, которую вы хотите.

Keltia
источник
3

Вы также должны взглянуть на «зависание» ваших драгоценных камней Rails в приложении. Это очень помогает при развертывании, особенно в средах общего хостинга.

Просто измените RAILS_GEM_VERSIONпеременную в config/environment.rbи выполните задачу freeze rake:

rake rails:freeze:gems
Тьяго Арраис
источник
использовать rvm использовать rubyversion
Apoorv
1

Есть два способа добиться этого:

один, как предлагается в принятом ответе:

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

альтернативный метод - создать gemfile с желаемой версией rails перед инициализацией проекта rails

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

Я написал об этом подробно в моей статье

Пракаш
источник