首页 > 解决方案 > 在本地运行 ruby​​ on rails 应用程序 - 不同版本的 ruby

问题描述

我正在使用 RVM 来管理我拥有的不同 ruby​​ 版本。一个特定的应用程序正在使用较旧的 ruby​​ 版本(2.3.1),我注意到,一旦我更改为该版本并rails server在其上运行,它就不起作用,因为我需要更改整个级联宝石或其他文件,如 nokogiri,使其运行。

一般来说,根据我在网上阅读的内容,我应该bundle install在运行之前做一个简单的操作rails server。但是,它不起作用,因为此文件中有更多冲突的内容,特别是版本被硬编码到其中。

基于此,如果上述步骤我已经完成,我该如何在我的本地服务器上运行这个应用程序,但不起作用?我正在使用 Ubuntu,如果有帮助的话。

标签: ruby-on-railsrubyubunturvm

解决方案


您正在处理所谓的依赖问题。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 应该在.ruby-version你的 rails 应用程序的基础文件中确定你的 ruby​​ 版本,并且应该与 Gemfile 中的版本匹配。如果您需要升级您的 ruby​​ 版本,捆绑器将有助于确保您的所有 gem 与该版本以及彼此兼容。你首先需要用 RVM 升级你的 ruby​​ 版本,然后在 Gemfile 中设置它。

但是,不能保证过时的 gem 会兼容。这就是锁定它们的全部意义,以便您知道哪些版本在给定时间点是稳定的。必须对 gem 的更新/升级进行兼容性测试,这有时可能是一个项目。

另请参阅Rails Bundle,gems 冲突,解决它的最佳方法


推荐阅读