我正在使用RVM管理我拥有的不同的红宝石版本。一个特定的应用程序使用的是较旧的ruby版本(2.3.1),我注意到,一旦更改为该版本并在其上运行rails server
,它便无法正常运行,因为我需要更改整个级联的Gems或其他文件(例如nokogiri)以使其运行。
通常,从网上阅读的内容来看,我应该在运行bundle install
之前做一个简单的rails server
来完成所有这些工作。但是,此文件不起作用,因为该文件中还有更多冲突的内容,特别是版本已被硬编码到其中。
基于此,我如何在本地服务器上运行此应用程序,如果上述步骤已经执行不了,怎么办?我正在使用Ubuntu,如果有帮助的话。
答案 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的更新/升级必须经过兼容性测试,这有时可能是一个项目。
答案 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