ruby-on-rails - 在本地运行 ruby on rails 应用程序 - 不同版本的 ruby
问题描述
我正在使用 RVM 来管理我拥有的不同 ruby 版本。一个特定的应用程序正在使用较旧的 ruby 版本(2.3.1),我注意到,一旦我更改为该版本并rails server
在其上运行,它就不起作用,因为我需要更改整个级联宝石或其他文件,如 nokogiri,使其运行。
一般来说,根据我在网上阅读的内容,我应该bundle install
在运行之前做一个简单的操作rails server
。但是,它不起作用,因为此文件中有更多冲突的内容,特别是版本被硬编码到其中。
基于此,如果上述步骤我已经完成,我该如何在我的本地服务器上运行这个应用程序,但不起作用?我正在使用 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 应该在.ruby-version
你的 rails 应用程序的基础文件中确定你的 ruby 版本,并且应该与 Gemfile 中的版本匹配。如果您需要升级您的 ruby 版本,捆绑器将有助于确保您的所有 gem 与该版本以及彼此兼容。你首先需要用 RVM 升级你的 ruby 版本,然后在 Gemfile 中设置它。
但是,不能保证过时的 gem 会兼容。这就是锁定它们的全部意义,以便您知道哪些版本在给定时间点是稳定的。必须对 gem 的更新/升级进行兼容性测试,这有时可能是一个项目。
推荐阅读
- total.js - 一次性使用 Total js 中的数据绑定和 SET 方法为所有表单元素设置值
- javascript - 在 TypeScript 中未找到存储库错误,当我通过 typeorm 连接到 MySQL 时遇到错误
- c - 关于 RISC-V 编译器?
- android - Android:导航组件不能同时使用:
和 NavigationItemSelectedListener - time - 计算从上午 12 点开始的工作时间
- c# - 优化 INSERT、DELETE、UPDATE SQL Server 表的简单方法包括具有图像数据类型的列,无需实体框架,分 3 个步骤(C#)
- java - 我们如何在 Spring Rest 控制器中解析 rpc 格式的 xml 请求?
- vb.net - 计时器案例在 y 中包含 x
- git - 如何从 Gitlab 提交历史中删除我的电子邮件?
- distributed-system - 两阶段提交是否安全