Ответы:
Я нашел здесь недокументированный вариант создания нового приложения с использованием более старой версии Rails.
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 <main> '
Вот команда, которую я обычно использую:
rails _version_ new application_name
например rails _2.1.0_ new my_app
Вот список всех доступных версий рельсов на данный момент:
У меня возникли некоторые проблемы при использовании 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
bundle update, это также обновит рельсы !!
bundle updateнеобходим, потому что используется обновление вручную ( --skip-bundle). Rails не будет обновлен, потому что в Gemfile указана конкретная версия (в примере 4.2.9.)
--forceперезаписывает Gemfile
bundle exec rails new...запустил версию, railsуказанную в Gemfile, которая в итоге заменяется.)
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
Как справедливо указано @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
Вы можете создать скелет с любой версией и потребовать ту, в которой вы хотите 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" из той версии, которую вы хотите.
Вы также должны взглянуть на «зависание» ваших драгоценных камней Rails в приложении. Это очень помогает при развертывании, особенно в средах общего хостинга.
Просто измените RAILS_GEM_VERSIONпеременную в config/environment.rbи выполните задачу freeze rake:
rake rails:freeze:gems
Есть два способа добиться этого:
один, как предлагается в принятом ответе:
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
Я написал об этом подробно в моей статье