在本地运行Rails应用程序上的ruby-不同版本的ruby

时间:2018-10-09 04:30:25

标签: ruby-on-rails ruby ubuntu rvm

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

通常,从网上阅读的内容来看,我应该在运行bundle install之前做一个简单的rails server来完成所有这些工作。但是,此文件不起作用,因为该文件中还有更多冲突的内容,特别是版本已被硬编码到其中。

基于此,我如何在本地服务器上运行此应用程序,如果上述步骤已经执行不了,怎么办?我正在使用Ubuntu,如果有帮助的话。

3 个答案:

答案 0 :(得分:1)

您正在处理所谓的依赖项问题。 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, gems conflicts, best way to solve it

答案 1 :(得分:0)

您可以创建一个.rvmrc文件或.ruby-version.ruby-gemset文件来隔离项目的gem。这是官方文档-https://rvm.io/workflow/projects#project-file-ruby-version

答案 2 :(得分:0)

您可以添加 RunLoop.current.run()echo '2.3.1' > .ruby-version进入工作文件夹 然后运行

echo 'newgemset' > .ruby-gemset