ฉันมีรางสองรุ่น (2.1.0 และ 2.2.2) ติดตั้งอยู่ในคอมพิวเตอร์ของฉัน
เมื่อฉันสร้างแอปพลิเคชันใหม่เป็นไปได้หรือไม่ที่จะระบุว่าฉันต้องการใช้เวอร์ชั่นที่เก่ากว่า (2.1.0)
ฉันมีรางสองรุ่น (2.1.0 และ 2.2.2) ติดตั้งอยู่ในคอมพิวเตอร์ของฉัน
เมื่อฉันสร้างแอปพลิเคชันใหม่เป็นไปได้หรือไม่ที่จะระบุว่าฉันต้องการใช้เวอร์ชั่นที่เก่ากว่า (2.1.0)
คำตอบ:
ฉันพบที่นี่เป็นตัวเลือกที่ไม่มีเอกสารในการสร้างแอปพลิเคชันใหม่โดยใช้ Rails รุ่นเก่ากว่า
rails _2.1.0_ new myapp
_3.1.3_
ใหม่ sample_app /home/ninad/.rbenv/versions/1.9.2-p290/lib/ruby/site_rubygems.rb:314 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
<หลัก> '
นี่คือคำสั่งที่ฉันใช้ตามปกติ:
rails _version_ new application_name
ตัวอย่างเช่น rails _2.1.0_ new my_app
นี่คือรายการของเวอร์ชั่นรางที่มีอยู่ทั้งหมด:
ฉันมีปัญหาในการใช้งานrails _version_ new application_name
(โครงการผลลัพธ์ยังคงถูกสร้างสำหรับการติดตั้ง Rails รุ่นใหม่ล่าสุด)
หลังจากขุดนิดหน่อยฉันพบบทความโดยMichael Trojanekด้วยวิธีการอื่น นี้ทำงานโดยการสร้างโฟลเดอร์กับ Gemfile ระบุรุ่นที่ต้องการของทางรถไฟแล้วใช้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'
ใน 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
แฟล็ก) และแทนที่จะติดตั้งบันเดิล ( --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 ด้วยรุ่นรางที่ต้องการก่อนเริ่มต้นโครงการราง
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
ฉันได้เขียนเกี่ยวกับเรื่องนี้ในรายละเอียดในบทความของฉัน