การระบุรุ่นรางที่จะใช้เมื่อสร้างแอปพลิเคชันใหม่


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
Peter Brown

ผิดพลาดที่มีการติดตั้ง Rails 3 ล้มเหลวสำหรับ2.3.5 - ทดสอบบน Mac OS X Snow Leopard เพียงแค่ติดตั้งโมดูลเหล่านี้: rails (3.0.5, 2.3.5, 2.2.2, 1.2.6)
Mike

13
นี่คือฟังก์ชัน RubyGems ไม่ใช่ฟังก์ชัน Rails ดังนั้นจึงไม่ขึ้นอยู่กับเวอร์ชั่นของ Rails และจะใช้ได้กับอัญมณีอื่น ๆ (ขอขอบคุณนี้เป็นคำตอบที่ดี!)
Calrion

2
ฉันได้รับข้อผิดพลาดเมื่อใช้ 3.1.3 เมื่อติดตั้ง 3.1.3 และ 3.2.0.rc1 นี่คือข้อผิดพลาด --- [ninad @ localhost devel] $ rails _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 <หลัก> '
Ninad

มีประโยชน์มากในขณะนี้ที่ 4.0.0 หมดแล้ว!
Jason

67

นี่คือคำสั่งที่ฉันใช้ตามปกติ:

rails _version_ new application_name

ตัวอย่างเช่น rails _2.1.0_ new my_app

นี่คือรายการของเวอร์ชั่นรางที่มีอยู่ทั้งหมด:

http://rubygems.org/gems/rails/versions


26

ฉันมีปัญหาในการใช้งาน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มันจะอัพเดททางรถไฟด้วย !!
Rajkaran Mishra

@devel bundle updateเป็นสิ่งจำเป็นเนื่องจากมีการใช้การอัปเดตด้วยตนเอง ( --skip-bundle) Rails จะไม่อัปเกรดเนื่องจากมีการระบุรุ่นเฉพาะใน 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ด้วย - บังคับตัวเลือก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 ที่คุณต้องการและให้ 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

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

หรือใช้คำสั่ง "rails" จากแบบที่คุณต้องการ


3

คุณควรดูที่ "การแช่แข็ง" อัญมณี Rails ของคุณลงในแอพ สิ่งนี้ช่วยได้มากในการปรับใช้โดยเฉพาะในสภาพแวดล้อมการโฮสต์ที่ใช้ร่วมกัน

เพียงแค่เปลี่ยนRAILS_GEM_VERSIONตัวแปรconfig/environment.rbและออกงาน freeze rake:

rake rails:freeze:gems

ใช้ rvm ใช้ rubyversion
Apoorv

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

ฉันได้เขียนเกี่ยวกับเรื่องนี้ในรายละเอียดในบทความของฉัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.