[英]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的更新/升級必須經過兼容性測試,這有時可能是一個項目。
您可以創建.rvmrc
文件或.ruby-version
和.ruby-gemset
文件來隔離項目的gem。 這是官方文檔-https://rvm.io/workflow/projects#project-file-ruby-version
您可以將echo '2.3.1' > .ruby-version
和echo 'newgemset' > .ruby-gemset
到工作文件夾中,然后運行
cd ./
rvm install ruby-2.3.1
gem install bundle
bundle install
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.