Відповіді:
Я знайшов тут незадокументований варіант створити нову програму, використовуючи старішу версію 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
). Рейки не буде оновлено, оскільки конкретна версія вказана в Gemfile (в прикладі 4.2.9)
--force
перезаписує Gemfile
bundle exec rails new...
запущена версія, rails
зазначена в Gemfile, яка в кінцевому підсумку замінюється.)
gem 'rails', '5.0.0.1' >> Gemfile
і після запуску bundle exec rails new
з --force опцією, її gem 'rails', '~> 5.0.0', '>= 5.0.0.1'
в Gemfile. Тепер, коли я запускаю bundle update
, його оновлення рейок до 5.0.4 (у Gemfile.lock), але я очікував використовувати рейки версії 5.0.0.1
Як справедливо зазначає @mikej для Rails 5.0.0 або вище , вам слід дотримуватися наступних кроків:
Створіть каталог для вашої програми разом з Gemfile, щоб вказати бажану версію Rails та дозволити постачальнику встановити залежні дорогоцінні камені:
$ 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
прапора), а замість встановлення пакета ( --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_GEM_VERSION
змінну в config/environment.rb
і випустіть задачу на заморожування граблі:
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 з потрібною версією рейки перед ініціалізацією проекту рейок
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
Про це я детально писав у своїй статті