Rackup LoadError-使用rackup命令时,任何config.ru文件都会给出LoadError

问题描述 投票:0回答:1

好,这是我的第一个问题。我为感到愚蠢而准备,但现在开始吧。

我在熟悉Ruby on Rails之前正在学习Ruby。我一直在学习在线课程,在这一刻,我们刚刚学习了如何使用机架来处理服务器的某些逻辑,以及如何运行config.ru文件来启动服务器。

但是,每次我尝试使用机架启动服务器时,都会得到如下所示的LoadError

    1: from /usr/local/bin/rackup:23:in `<main>'
/usr/local/bin/rackup:23:in `load': cannot load such file -- /usr/lib/ruby/gems/2.5.0/gems/rack-2.0.7/bin/rackup (LoadError)```

现在,我一直在以我能想到的每个可能的角度来敲我的头。我理解这个错误是在说路径-rackup命令试图从中加载机架代码-不存在。我尝试制作多个不同的.ru文件,以测试它是否是shebang问题,.ru文件的内容问题,等等。但这似乎并非如此。我什至无法运行机架宝石随附的示例lobster.ru文件。我犯了同样的错误。

我还尝试过重新安装机架gem,更改其默认版本。都没有帮助。我考虑过使用不同版本的Ruby,但这似乎并不重要。问题很明显是机架出现在错误的位置。

但是,如果我在简单的ruby服务器上使用require 'rack',则没有任何问题。机架工作。因此,所有这些都告诉我,这必须与rackup命令本身有关。

确实,当我转到/usr/lib/ruby/gems/2.5.0/gems时,没有rack-2.0.7目录。相反,该目录位于var/lib/gems/2.5.0/gems

我注意到var/lib/gems/2.5.0位于RubyGems环境的GEM PATHS中。但是/usr/lib/ruby/gems/2.5.0'不是。

所以我对解决这个问题的想法是:

  1. 更改机架加载机架gem的方式。我研究了这个问题,这意味着更改在rubygems甚至连机架文件中看起来正确的代码。如果我篡改它,我会破坏它,因为我不知道自己在做什么。这不是明智的选择。

  2. usr/lib...添加到GEM路径,以便在rackup和rubygems查找机架宝石时,可以找到它。搜索了一下这种可能性之后,似乎不建议手动将其添加到GEM PATH中。无论如何,我还是尝试了...但是它没有用(仅供参考,我通过在export GEM_PATH=...上添加.bashrc将其添加到GEM PATH

    编辑:睡过头了,我知道为什么上面的第二个选项也不起作用。只是将缺少的目录添加到GEM PATH或$ LOAD_PATH中将无济于事,因为rackup正在寻找机架的特定位置但找不到。如果我查看机架代码,则如下所示:

  3. if Gem.respond_to?(:activate_bin_path)
    load Gem.activate_bin_path('rack', 'rackup', version)
    else
    gem "rack", version
    load Gem.bin_path("rack", "rackup", version)
    end
    

进行查找的代码段由:activate_bin_pathbin_path定向,它们均在rubygems代码中定义。

因此,如果我正确理解这一点,它就像是在将错误的路线指引到不存在的地方。好像它应该向左转时向右转。我的选择是要么以某种方式改变方向以告诉它“向左走”,要么构建其在“向右走”中寻找的东西。

确保它“离开”是更好的解决方案,但我不知道该怎么做。因此,我建立了它在“右侧”寻找的内容:我将机架gem复制到了rackup要查找的/usr/lib/ruby/gems/2.5.0/gems/目录中。它解决了rackup找不到所需内容的问题-现在,ackup可以正常工作了,服务器正常工作。但是这种解决方案将来会困扰我,例如如果机架已更新...这是一种野蛮的解决方案,而我更喜欢一种优雅的解决方案。

[因此,如果有人对如何确保机架获得正确的方向有所了解,请告诉我!我认为必须与确保rubygems bin_path:activate_bin_path与实际安装宝石的位置有关。目前,基本差异似乎是宝石存在于var中,但外观却在usr中。

谢谢!

好,这是我的第一个问题。我为感到愚蠢而准备,但这是可行的。在熟悉Ruby on Rails之前,我目前正在学习Ruby。我一直在学习在线课程,并且...

ruby-on-rails ruby rubygems rack rackup
1个回答
0
投票

尝试此文件:

config.ru

© www.soinside.com 2019 - 2024. All rights reserved.