Chúng được phát triển bởi các nhóm khác nhau tại các thời điểm khác nhau và được sử dụng bởi các phần mềm khác nhau.
Liệt kê phiên bản Ruby trong Gemfile là feature in bundler.
Vì Gemfile chủ yếu chỉ được sử dụng bởi bundler, nó chủ yếu sẽ chỉ tác dụng khi bạn chạy với bundler - sử dụng bundle exec
hoặc phần mềm (như Rails) tự động kích hoạt gói cho bạn. Đó là hiệu ứng chỉ đơn giản là để lỗi và từ chối chạy nếu bạn không sử dụng phiên bản của ruby quy định. Đó là một yêu cầu - chạy theo ruby này, hoặc tôi sẽ ném một cảnh báo lỗi bạn đang chạy dưới ruby sai.
Tuy nhiên, heroku also pays attention đối với phiên bản được chỉ định trong Gemfile và sẽ chạy trong phiên bản đó. Heroku cũng quyết định sử dụng tính năng này trong bundler. Nhưng hầu hết các phần mềm khác, trên máy trạm của bạn, hoặc thậm chí travis, không sử dụng quy ước đó. (Travis làm cho bạn chỉnh sửa .travis.yml ENV của bạn để chỉ định phiên bản ruby để sử dụng).
Các tính năng trong bundler được giới thiệu vào Bundler 1.2 vào tháng năm 2012.
File .ruby-version lần đầu tiên được giới thiệu bởi rvm, là người đầu tiên phiên bản ruby người quản lý. Nếu bạn đang sử dụng rvm, và bạn chuyển sang một dự án direcotry với một tập tin .ruby-version
, rvm sẽ tự động chuyển đổi vỏ của bạn để sử dụng phiên bản ruby được chỉ định.
Tôi không chắc khi nào rvm giới thiệu tính năng này, nhưng tôi nghĩ trước tính năng "ruby" của Gemfile.
Vì rvm đã giới thiệu, phần mềm chuyển đổi phiên bản ruby khác như rbenv và chruby cũng đã sử dụng phần mềm này để thực hiện tương tự - tự động chuyển sang phiên bản ruby được chỉ định khi bạn cd
vào thư mục. Mặc dù tôi nghĩ rằng với rbenv và chruby cả hai nó có thể là một tính năng tùy chọn.
Vì vậy, chúng là các tính năng khác nhau được giới thiệu và hỗ trợ bởi các gói phần mềm khác nhau vào các thời điểm khác nhau, làm những việc khác biệt một chút.
Tôi đồng ý sẽ gây khó chịu để duy trì cả hai và giữ cho chúng được đồng bộ hóa.
Cả hai đều thực sự là tùy chọn, bạn không cần phải sử dụng cả hai. Ngoại trừ việc bạn có thể cần phải sử dụng thông số ruby Gemfile cho heroku, để cho nó biết ruby bạn muốn nó chạy.
Tôi cũng không sử dụng cá nhân. Nhưng nếu bạn cần làm việc trong các phiên bản ruby khác nhau trong các dự án khác nhau, và thấy thuận tiện khi có trình quản lý phiên bản ruby (rvm, rbenv hoặc chruby) tự động chuyển sang phiên bản ruby dự án phù hợp, .ruby-version
có thể hữu ích.
Trừ mục đích heroku, việc liệt kê ruby trong Gemfile chủ yếu là để giữ cho bản thân không mắc lỗi, ví dụ như khi triển khai. Hoặc có lẽ một triển khai tự động hóa trong nhà hoặc môi trường CI có thể sử dụng chúng giống như Heroku, hoặc có lẽ các ngăn xếp triển khai đám mây khác sẽ hoặc đã áp dụng nó. Tôi nghĩ rằng nhiều người đã tìm thấy nó không quá hữu ích mặc dù - điều này quá, tôi sẽ không sử dụng cho đến khi bạn chạy vào hoặc thấy một vấn đề mà nó giải quyết. Một sự bất tiện mà một số người có với các phiên bản ruby trong Gemfile là với những viên hồng ngọc mới luôn luôn xuất hiện, bạn phải cập nhật tất cả các Gemfiles của bạn mọi lúc. Nói chung, vài năm gần đây các bản phát hành ruby đều tương thích ngược, hạn chế sự cần thiết phải chắc chắn bạn đang sử dụng phiên bản ruby chính xác, mã gần đây nhất sẽ chạy trên ruby gần đây nhất, ngay cả khi ban đầu nó được viết cho một cái cũ hơn.
Tôi không tin rằng một trong hai tính năng cho phép bạn chỉ định một loạt các phiên bản ruby, như 2.2.*
hoặc những gì có bạn.
Với cả hai/cả hai tính năng, chỉ sử dụng chúng nếu bạn cần hoặc tìm chúng hữu ích, bạn không cần phải sử dụng, và nó sẽ tốt (nếu khó chịu) để sử dụng cả hai, nếu bạn cần cả hai.
Vì Gemfile là mã ruby trực tiếp, bạn về lý thuyết có thể Gemfile của bạn đọc tệp .ruby-version
và tự động sử dụng giá trị đó làm giá trị Gemfile ruby
. Nếu bạn muốn sử dụng cả hai, và "không lặp lại chính mình" với nó. Tôi không biết nếu đó là một điều phổ biến để làm, tôi chỉ nghĩ về nó. Nhưng nó sẽ hoạt động tốt.
Tôi nghĩ rằng bạn không cần phải xác định phiên bản ruby trong Gemfile của bạn ở tất cả . –
Afaik '.ruby-version' đặt phiên bản Ruby cho RVM hoặc rbenv, nhưng Heroku lấy ví dụ lấy phiên bản Ruby từ Gemfile ([source] (https://devcenter.heroku.com/articles/ruby-versions)) . – spickermann
Cảm ơn @spickermann, có vẻ như đó là một ý tưởng hay để có cả hai. – Todd