运行 rails 本地应用上的 ruby - ruby 的不同版本

Running a ruby on rails app locally - Different versions of ruby

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

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

基于此,我如何才能运行在我的本地服务器上安装此应用程序,如果我已完成上述步骤,但仍然不起作用?如果有帮助,我正在使用 Ubuntu。

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

您正在处理所谓的依赖性问题。 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 时,它将确保一切都与这些版本兼容。虽然 运行ning bundle update 只会更新版本之前带有 ~> 的版本,并且只会升级次要语义版本,因为它们不应该有重大更改。

那么,为什么您的应用无法运行?那么 Gemfile 应该包含一个 ruby 版本。 RVM 应该根据 rails 应用确定 .ruby-version 文件中的 ruby 版本,并且应该与 Gemfile 中的版本相匹配。如果您需要升级 ruby 版本,捆绑器将帮助确保您所有的 gem 都与该版本兼容并相互兼容。您首先需要使用 RVM 升级 ruby 版本,然后在 Gemfile 中进行设置。

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

另见 Rails Bundle, gems conflicts, best way to solve it

你可以添加 echo '2.3.1' > .ruby-versionecho 'newgemset' > .ruby-gemset 到工作文件夹 然后 运行

cd ./
rvm install ruby-2.3.1
gem install bundle
bundle install