簡體   English   中英

在本地運行Rails應用程序上的ruby-不同版本的ruby

[英]Running a ruby on rails app locally - Different versions of ruby

我正在使用RVM管理我擁有的不同的紅寶石版本。 一個特定的應用程序使用的是較舊的ruby版本(2.3.1),我注意到,一旦更改為該版本並在其上運行rails server ,它便無法工作,因為我需要更改Gems或其他文件(例如nokogiri)的整個級聯,以使其運行。

通常,從網上閱讀的內容來看,在運行rails server之前,我應該做一個簡單的bundle install即可完成所有這些工作。 但是,它不起作用,因為此文件中還有更多沖突的內容,特別是版本已被硬編碼到其中。

基於此,如果完成上述步驟,我將無法在本地服務器上運行此應用程序? 我正在使用Ubuntu,如果有幫助的話。

您正在處理所謂的依賴性問題。 Gemfile和Gemfile.lock的要點是確保應用程序不存在依賴關系問題,並且bundle install將處理該問題。 但是,通常在Gemfile中設置版本以鎖定到特定的主要發行版本,這可能允許進行次要版本更新。 這看起來像:

#Gemfile
gem 'rails', '4.2.10'
gem 'pg', '0.20.0'

gem 'after_party', '~> 1.10' #minor version updates will run here
gem 'kaminari', '~> 1.1'

ruby '2.3.6'

這是一個簡單的例子。 現在,當您運行bundle install ,它將確保所有內容都與這些版本兼容。 在運行bundle update時,僅會在版本之前使用~>更新版本,並且僅會升級次要語義版本,因為它們不應該進行重大更改。

那么,為什么您的應用程序無法正常工作? 那么Gemfile應該已經包含了ruby版本。 RVM應該在Rails應用程序的基礎上的.ruby-version文件中確定您的ruby版本,並且應與Gemfile中的版本匹配。 如果您需要升級紅寶石版本捆綁程序,則將有助於確保所有寶石都與該版本以及彼此兼容。 您首先需要使用RVM升級紅寶石版本,然后在Gemfile中進行設置。

但是,不能保證過時的寶石將兼容。 這就是鎖定它們的全部目的,這樣您就可以知道在給定的時間點哪個版本是穩定的。 對gem的更新/升級必須經過兼容性測試,這有時可能是一個項目。

另請參見Rails Bundle,寶石沖突,解決它的最佳方法

您可以創建.rvmrc文件或.ruby-version.ruby-gemset文件來隔離項目的gem。 這是官方文檔-https://rvm.io/workflow/projects#project-file-ruby-version

您可以將echo '2.3.1' > .ruby-versionecho 'newgemset' > .ruby-gemset到工作文件夾中,然后運行

cd ./
rvm install ruby-2.3.1
gem install bundle
bundle install

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM