【问题标题】:`require': cannot load such file -- rack/handler (LoadError)`require\': 无法加载这样的文件 -- rack/handler (LoadError)
【发布时间】:2023-01-12 06:28:41
【问题描述】:

我不是 Ruby 用户,所以这可能是一个 101 问题。我只是想使用一个恰好用 Ruby 编写的实用程序。

我正在使用 tilemaker,这是 openstreetmap 生态系统中的一个实用程序。它以 mbtiles 格式创建图块。该存储库附带一个简单的实用程序,用于在浏览器上提供磁贴以测试您创建的文件。这个实用程序是用 Ruby 编写的,这是我遇到的问题。

repo 的自述文件包含服务器实用程序的说明。安装说明如下:

(如果您还没有它们,则需要安装 Ruby 和运行演示服务器所需的 gem。例如,在 Ubuntu 上,sudo apt install sqlite3 libsqlite3-dev ruby ruby-dev,然后是sudo gem install sqlite3 cgi glug rack。)

我在使用 Debian 11(在 Qubes 上,所以我不介意按照他们的建议运行 sudo gem install)。我希望这与 Ubuntu 足够接近,但也许这与问题有关。

这就是我得到的:

$ ruby server.rb ~/countries-raster.mbtiles 
Starting local server
Traceback (most recent call last):
        3: from server.rb:22:in `<main>'
        2: from server.rb:118:in `<class:MapServer>'
        1: from /usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb:85:in `require'
/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb:85:in `require': cannot load such file -- rack/handler (LoadError)

我在这里错过了什么?谢谢。

【问题讨论】:

  • 您缺少 rack gem(可能还​​有其他那些 gem),但不确定为什么他们告诉您以 sudo 运行它。我会先尝试相同的命令,例如gem install sqlite3 cgi glug rack

标签: ruby openstreetmap rack mbtiles


【解决方案1】:

为了在您的用户下进行更好的设置,可以这样做:

  1. 通过以下方式确保在您的用户下运行 ruby​​:
    ruby -v # 2.7 or higher is better
    
    1. 然后在你的脚本server.rb之外创建一个名为Gemfile的文件:
    # Gemfile
    source "https://rubygems.org"
    
    gem "rack"
    gem "sqlite3"
    gem "cgi"
    gem "glug"
    
    1. 之后,确保安装了bundler(这是管理 gem 版本控制的 gem),方法是:
    gem install bundler
    

    如果您遇到权限错误,是因为您的ruby 程序在root 用户下。所以你可以通过sudo bundle install使用,但其他任何东西都必须在sudo下运行,或者你可以安装和设置rvm,它将在你的用户下安装和配置ruby

    1. 安装后您可以调用:
    bundle install 
    # will install all the gems needed and will lock the latest versions for you inside Gemfile.lock
    
    1. 通过以下方式运行您的服务器:
    bundle exec ruby server.rb
    

    通过 bundle exec 运行,告诉 ruby​​ 使用由 Gemfile.lock 安装和版本控制的 gem。这保证您的软件需要特定版本并避免冲突或其他任何事情。

【讨论】:

  • 没有像 Ruby 2.8 这样的版本。 ruby-lang.org/en/downloads/releases 你可能是说 2.7,但这很快就会停产。推荐最新版本的 Ruby,或者至少是仍在正常维护中的版本。
  • 这是一个错字,大声笑。 2.7.7 将适合大多数项目,但对于那些使用新功能语言的 gem 来说,它会崩溃;可以肯定的是,我会使用 3.2.0
猜你喜欢
  • 2015-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-11
  • 1970-01-01
相关资源
最近更新 更多