【问题标题】:Running a ruby on rails app locally - Different versions of ruby在本地运行 ruby​​ on rails 应用程序 - 不同版本的 ruby
【发布时间】:2018-10-09 04:30:25
【问题描述】:

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

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

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

【问题讨论】:

    标签: ruby-on-rails ruby ubuntu rvm


    【解决方案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 中的版本匹配。如果您需要升级您的 ruby​​ 版本,捆绑器将有助于确保您的所有 gem 与该版本以及彼此兼容。你首先需要用 RVM 升级你的 ruby​​ 版本,然后在 Gemfile 中设置它。

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

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

    【讨论】:

    • 感谢 lacoste 的精彩解释!我在想“为什么”它首先被锁定时感到非常沮丧,但是您的解释对于为什么需要锁定它是完全有道理的。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多