Вказання версії рейки, яку слід використовувати під час створення нового додатка


227

У мене на комп’ютері встановлені дві версії рейок (2.1.0 та 2.2.2).

Коли я створюю нову програму, чи можна вказати, що я хочу використовувати старішу (2.1.0) версію?


Відповіді:


503

Я знайшов тут незадокументований варіант створити нову програму, використовуючи старішу версію Rails.

rails _2.1.0_ new myapp 

1
Ви повинні змінити це на прийнятий відповідь, оскільки він працює для Rails 2 і 3. Відповідь Keltia більше не працюватиме, якщо у вас встановлено Rails 3 і хочете додаток Rails 2.
Пітер Браун

Помилково, що встановлення Rails 3 не вдалося до 2.3.5 - Щойно перевірено на Mac OS X Snow Leopard із встановленими модулями: рейли (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!
Джейсон


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

Я не думаю, що в цьому є потреба bundle update, він також буде оновлювати рейки !!
Rajkaran Mishra

@devel the bundle updateпотрібен, оскільки використовується ручне оновлення ( --skip-bundle). Рейки не буде оновлено, оскільки конкретна версія вказана в Gemfile (в прикладі 4.2.9)
mikej

--forceперезаписує Gemfile
Rajkaran Mishra

Так, але новий Gemfile, який пишеться, все ще вказує на потрібну нам версію Rails (тому що bundle exec rails new...запущена версія, railsзазначена в Gemfile, яка в кінцевому підсумку замінюється.)
mikej

1
Я зробив 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
Rajkaran Mishra

9

Як справедливо зазначає @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

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

або скористайтеся командою "рейки" у формі, яку ви хочете в будь-якому випадку.


3

Також слід поглянути на "заморожування" дорогоцінних каменів Rails у програмі. Це дуже допомагає при розгортанні, особливо в умовах спільного хостингу.

Просто змініть RAILS_GEM_VERSIONзмінну в config/environment.rbі випустіть задачу на заморожування граблі:

rake rails:freeze:gems

use rvm use rubyversion
Апоорв

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 з потрібною версією рейки перед ініціалізацією проекту рейок

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

Про це я детально писав у своїй статті

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.