Chỉ định phiên bản đường ray để sử dụng khi tạo ứng dụng mới


227

Tôi có hai phiên bản đường ray (2.1.0 và 2.2.2) được cài đặt trong máy tính của tôi.

Khi tôi tạo một ứng dụng mới, có thể chỉ định rằng tôi muốn sử dụng phiên bản cũ hơn (2.1.0) không?


Câu trả lời:


503

Tôi tìm thấy ở đây một tùy chọn không có giấy tờ để tạo một ứng dụng mới bằng phiên bản Rails cũ hơn.

rails _2.1.0_ new myapp 

1
Bạn nên thay đổi câu trả lời này thành câu trả lời được chấp nhận vì nó hoạt động cho Rails 2 và 3. Câu trả lời của Keltia sẽ không còn hoạt động nếu bạn đã cài đặt Rails 3 và muốn có ứng dụng Rails 2.
Peter Brown

Sai lầm khi cài đặt Rails 3 không thành công cho 2.3.5 - Chỉ được thử nghiệm trên Mac OS X Snow Leopard với các mô-đun được cài đặt: rails (3.0.5, 2.3.5, 2.2.2, 1.2.6)
Mike

13
Đây là chức năng của RubyGems, không phải chức năng Rails; do đó, nó không phụ thuộc vào phiên bản Rails và sẽ hoạt động với các loại đá quý khác. (Cảm ơn, đây là một câu trả lời tuyệt vời!)
Calrion

2
Tôi gặp lỗi khi sử dụng 3.1.3 khi cài đặt 3.1.3 và 3.2.0.rc1. Đây là lỗi --- [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> '
Ninad

Rất hữu ích khi 4.0.0 đã ra!
Jason

67

Đây là lệnh mà tôi sử dụng bình thường:

rails _version_ new application_name

ví dụ rails _2.1.0_ new my_app

Dưới đây là danh sách tất cả các phiên bản đường ray có sẵn cho đến nay:

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


26

Tôi đã gặp một số rắc rối khi sử dụng rails _version_ new application_name(dự án kết quả vẫn được tạo cho phiên bản Rails mới nhất được cài đặt.)

Sau khi đào một chút, tôi tìm thấy một bài viết của Michael Trojanek với một cách tiếp cận khác. Điều này hoạt động bằng cách tạo một thư mục với Gemfile chỉ định phiên bản Rails mong muốn và sau đó sử dụng bundle exec rails...để Bundler đảm nhiệm việc chạy phiên bản thích hợp của rails. ví dụ: để tạo một dự án Rails 4.2.9 mới, các bước là:

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

Tôi không nghĩ là cần bundle update, nó cũng sẽ cập nhật đường ray !!
Rajkaran Mishra

@ phát bundle update là cần thiết vì một bản cập nhật thủ công đang được sử dụng ( --skip-bundle). Rails sẽ không được nâng cấp vì một phiên bản cụ thể được chỉ định trong Gemfile (ví dụ 4.2.9.)
mikej

--forceđang ghi đè lên Gemfile
Rajkaran Mishra 30/07/17

Đúng, nhưng Gemfile mới được viết vẫn chỉ định phiên bản Rails mà chúng ta muốn (vì bundle exec rails new...đã chạy phiên bản railsđược chỉ định trong Gemfile cuối cùng bị thay thế.)
mikej

1
Tôi đã làm gem 'rails', '5.0.0.1' >> Gemfilevà sau khi chạy bundle exec rails newvới tùy chọn --force, nó gem 'rails', '~> 5.0.0', '>= 5.0.0.1'ở Gemfile. Bây giờ khi tôi chạybundle update , nó cập nhật đường ray lên 5.0.4 (trong Gemfile.lock), nhưng tôi đã mong đợi sử dụng đường ray phiên bản 5.0.0.1
Rajkaran Mishra

9

Như được chỉ ra đúng bởi @mikej cho Rails 5.0.0 trở lên , bạn nên làm theo các bước sau:

Tạo một thư mục cho ứng dụng của bạn cùng với Gemfile để chỉ định phiên bản Rails mong muốn của bạn và cho phép trình cài đặt cài đặt các viên ngọc phụ thuộc:

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

Kiểm tra xem phiên bản chính xác của đường ray đã được cài đặt chưa: $ bundle exec rails -v

Bây giờ hãy tạo ứng dụng của bạn, hãy để Rails tạo Gemfile mới (hoặc ghi đè lên ứng dụng hiện có bằng cách sử dụng --forcecờ) và thay vì cài đặt gói ( --skip-bundle) cập nhật thủ công:

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

Nếu bạn kiểm tra mục nhập cho đường ray trong Gemfile, nó sẽ như thế này:

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

Bạn nên cập nhật nó lên phiên bản chính xác cần thiết cho ứng dụng:

gem 'rails', '5.0.0.1'

Bây giờ, bước cuối cùng:

$ bundle update

3

Bạn có thể tạo bộ xương với một trong hai phiên bản và yêu cầu bộ xương bạn muốn 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

hoặc sử dụng lệnh "rails" từ phiên bản bạn muốn.


3

Bạn cũng nên xem "đóng băng" đá quý Rails của mình vào ứng dụng. Điều này giúp ích rất nhiều cho việc triển khai, đặc biệt trong môi trường lưu trữ được chia sẻ.

Chỉ cần thay đổi RAILS_GEM_VERSIONbiến trong config/environment.rbvà đưa ra tác vụ đóng băng:

rake rails:freeze:gems

sử dụng rvm sử dụng rubyversion
Apoorv

1

Có hai cách để đạt được điều này:

một như đề xuất trong câu trả lời được chấp nhận:

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

và phương pháp thay thế là tạo gemfile với phiên bản rails mong muốn trước khi khởi tạo dự án rails

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

Tôi đã viết về điều này một cách chi tiết trong bài viết của tôi

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.