Jawaban:
Di sini saya menemukan opsi tidak berdokumen untuk membuat aplikasi baru menggunakan versi Rails yang lebih lama.
rails _2.1.0_ new myapp
_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> '
Ini adalah perintah yang saya gunakan secara normal:
rails _version_ new application_name
sebagai contoh rails _2.1.0_ new my_app
Berikut adalah daftar semua versi rel yang tersedia:
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
bundle update
, itu akan memperbarui rel juga !!
bundle update
diperlukan karena pembaruan manual sedang digunakan ( --skip-bundle
). Rails tidak akan ditingkatkan karena versi spesifik ditentukan dalam Gemfile (4.2.9 dalam contoh.)
--force
sedang menimpa Gemfile
bundle exec rails new...
menjalankan versi yang rails
ditentukan dalam Gemfile yang akhirnya diganti.)
gem 'rails', '5.0.0.1' >> Gemfile
dan setelah menjalankan bundle exec rails new
dengan 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
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 --force
flag) 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
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.
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_VERSION
variabel dalam config/environment.rb
dan keluarkan tugas pembekuan penggaruk:
rake rails:freeze:gems
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