Menentukan versi rel yang akan digunakan saat membuat aplikasi baru


227

Saya memiliki dua versi rel (2.1.0 dan 2.2.2) yang diinstal di komputer saya.

Ketika saya membuat aplikasi baru, apakah mungkin untuk menentukan bahwa saya ingin menggunakan versi yang lebih lama (2.1.0)?


Jawaban:


503

Di sini saya menemukan opsi tidak berdokumen untuk membuat aplikasi baru menggunakan versi Rails yang lebih lama.

rails _2.1.0_ new myapp 

1
Anda harus mengubahnya ke jawaban yang diterima karena ini berfungsi untuk Rails 2 dan 3. Jawaban Keltia tidak akan berfungsi lagi jika Anda memiliki Rails 3 diinstal dan menginginkan aplikasi Rails 2.
Peter Brown

Salah bahwa menginstal Rails 3 gagal untuk 2.3.5 - Baru diuji pada Mac OS X Snow Leopard dengan modul-modul ini diinstal: rails (3.0.5, 2.3.5, 2.2.2, 1.2.6)
Mike

13
Ini adalah fungsionalitas RubyGems, bukan fungsionalitas Rails; Oleh karena itu tidak tergantung pada versi Rails, dan akan bekerja untuk permata lainnya. (Terima kasih, ini jawaban yang bagus!)
Calrion

2
Saya mendapatkan kesalahan saat menggunakan 3.1.3 ketika 3.1.3 dan 3.2.0.rc1 diinstal. Berikut adalah kesalahan --- [Ninad @ localhost devel] $ rel _3.1.3_/home/ninad/.rbenv/versions/1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems.rb:314:in sample_app baru 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> '
Ninad

Sangat membantu karena 4.0.0 sudah keluar!
Jason


26

Saya mengalami masalah dalam menggunakan rails _version_ new application_name(proyek yang dihasilkan masih dihasilkan untuk versi Rails terbaru yang diinstal.)

Setelah sedikit menggali saya menemukan sebuah artikel oleh Michael Trojanek dengan pendekatan alternatif. Ini bekerja dengan membuat folder dengan Gemfile menentukan versi Rails yang diinginkan dan kemudian menggunakan bundle exec rails...sehingga Bundler mengurus menjalankan versi yang sesuai rails. misalnya untuk membuat proyek Rails 4.2.9 yang baru, langkah-langkahnya adalah:

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

Saya tidak berpikir ada kebutuhan bundle update, itu akan memperbarui rel juga !!
Rajkaran Mishra

@ Tingkat bundle updatediperlukan karena pembaruan manual sedang digunakan ( --skip-bundle). Rails tidak akan ditingkatkan karena versi spesifik ditentukan dalam Gemfile (4.2.9 dalam contoh.)
mikej

--forcesedang menimpa Gemfile
Rajkaran Mishra

Yap, tetapi Gemfile baru yang ditulis masih menentukan versi Rails yang kami inginkan (karena bundle exec rails new...menjalankan versi yang railsditentukan dalam Gemfile yang akhirnya diganti.)
mikej

1
Saya lakukan gem 'rails', '5.0.0.1' >> Gemfiledan setelah menjalankan bundle exec rails newdengan opsi --force, itu gem 'rails', '~> 5.0.0', '>= 5.0.0.1'di Gemfile. Sekarang ketika saya menjalankan bundle update, itu memperbarui rel ke 5.0.4 (di Gemfile.lock), tapi saya mengharapkan untuk menggunakan versi rel 5.0.0.1
Rajkaran Mishra

9

Seperti yang ditunjukkan dengan tepat oleh @mikej untuk Rails 5.0.0 atau lebih tinggi , Anda harus mengikuti langkah-langkah ini:

Buat direktori untuk aplikasi Anda bersama Gemfile untuk menentukan versi Rails yang Anda inginkan dan biarkan bundler menginstal permata dependen:

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

Pastikan versi rel yang benar telah dipasang: $ bundle exec rails -v

Sekarang buat aplikasi Anda, biarkan Rails membuat Gemfile baru (atau lebih tepatnya menimpa yang sudah ada dengan menggunakan --forceflag) dan alih-alih menginstal bundel ( --skip-bundle) perbarui secara manual:

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

Jika Anda memeriksa entri untuk rel Gemfile, itu harus seperti ini:

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

Anda harus memperbarui ke versi persis yang dibutuhkan untuk aplikasi:

gem 'rails', '5.0.0.1'

Sekarang, langkah terakhir:

$ bundle update

3

Anda bisa membuat kerangka dengan versi mana pun dan membutuhkan kerangka yang Anda inginkan di 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

atau gunakan perintah "rails" dari versi yang Anda inginkan.


3

Anda juga harus melihat "membekukan" permata Rails Anda ke dalam aplikasi. Ini banyak membantu dengan penyebaran, khususnya di lingkungan hosting bersama.

Cukup ganti RAILS_GEM_VERSIONvariabel dalam config/environment.rbdan keluarkan tugas pembekuan penggaruk:

rake rails:freeze:gems

use rvm use rubyversion
Apoorv

1

Ada dua cara untuk mencapai ini:

satu seperti yang disarankan dalam jawaban yang diterima:

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

dan metode alternatif adalah membuat gemfile dengan versi rel yang diinginkan sebelum memulai proyek rel

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

Saya telah menulis tentang ini secara rinci dalam artikel saya

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.