Sinatra 应用程序中的“Rake 无法加载此类文件”错误

Posted

技术标签:

【中文标题】Sinatra 应用程序中的“Rake 无法加载此类文件”错误【英文标题】:"Rake cannot load such file" error in Sinatra app 【发布时间】:2021-11-04 16:33:19 【问题描述】:

我正在构建一个 Sinatra 应用程序并尝试使用 ActiveRecord。每当我运行任何 rake 任务时,Rake 都无法识别我的控制器文件并返回 rake aborted! LoadError: cannot load such file。这是我的宝石:

source "https://rubygems.org"
ruby "2.7.2"

gem 'sinatra'
gem 'thin'
gem 'shotgun'
gem 'require_all'
gem 'activerecord'
gem 'sinatra-activerecord'
gem 'sqlite3'
gem 'rake', '~> 13.0.6'

这是 Rakefile:

# Rakefile
require 'sinatra/activerecord/rake'
require_relative './app/test_controller.rb'

有什么想法吗?在 Rakefile 中,我尝试了 require_relative 用于 ./app、/app、../app 等。此外,我有点时间紧张,所以如果我不能快速解决这个问题我需要 Rake 来使用 ActiveRecord?

【问题讨论】:

你不需要 需要 rake 来使用 activerecord,但它确实使运行迁移(和其他事情)更容易。为什么需要加载控制器?你可以删除那条线(如果那是它失败的地方) 哇哦,成功了,谢谢!如果你有时间,你介意解释一下为什么我不需要加载它吗?这是我第一次使用 Sinatra,我正在阅读的所有教程都说您需要 require ./app(或一些变体)。 回复有点长,我把它作为答案 【参考方案1】:

TL/DR:

从您的 Rakefile 中删除 require_relative './app/test_controller.rb'

详情:

Rake 是一个工具,可以让我们从命令行定义和运行命令(例如rake db:migrate)。 Activerecord 捆绑了一些 rake 任务(如生成迁移文件、运行迁移文件、转储/加载数据库架构等),使其更易于使用。

Rake 任务只是 ruby​​,因此要成功运行 Rake 任务,它需要加载它所依赖的任何类/文件(通常由每个 rake 任务独立处理)。如果您要编写自己的 rake 任务,您需要确保这些任务需要相关文件。通常不建议在基本 Rakefile 中加载您的应用程序(或 sinatra 控制器),因为它并不总是需要。

如果您需要加载某种“引导”或“配置”文件以设置数据库连接/配置,以便 activerecord rake 任务可以成功连接到您的数据库,则例外情况。

【讨论】:

谢谢!这是超级有用的

以上是关于Sinatra 应用程序中的“Rake 无法加载此类文件”错误的主要内容,如果未能解决你的问题,请参考以下文章

在 MacRuby 应用程序中运行 Sinatra

如何在 Sinatra 应用程序中链接 Sass 文件?

send_file 用于 Sinatra 中的临时文件

与Sinatra一起设计

如何使用 HAML 提高 Sinatra 性能?

在新的 Sinatra 扩展中集成模型和视图