Câu trả lời:
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
_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> '
Đâ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:
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
bundle update
, nó cũng sẽ cập nhật đường ray !!
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.)
--force
đang ghi đè lên Gemfile
bundle exec rails new...
đã chạy phiên bản rails
được chỉ định trong Gemfile cuối cùng bị thay thế.)
gem 'rails', '5.0.0.1' >> Gemfile
và sau khi chạy bundle exec rails new
vớ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
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 --force
cờ) 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
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.
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_VERSION
biến trong config/environment.rb
và đưa ra tác vụ đóng băng:
rake rails:freeze:gems
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