我正在构建一个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吗?
发布于 2021-09-07 20:50:01
TL/DR:
从Rakefile中删除require_relative './app/test_controller.rb'。
详细信息:
Rake是一个允许我们从命令行定义和运行命令的工具(例如rake db:migrate)。Activerecord附带了一些rake任务(比如生成迁移文件、运行迁移文件、转储/加载数据库模式等),这些任务使得处理起来更加容易。
Rake任务只是ruby,因此要成功地运行Rake任务,它需要加载它所依赖的任何类/文件(通常由每个rake任务独立处理)。如果要编写自己的rake任务,则需要确保这些任务需要相关的文件。将应用程序(或sinatra控制器)加载到基础Rakefile通常不会被建议,因为它并不总是需要的。
如果您需要加载某种“boot”或“config”文件以设置数据库连接/配置,以便activerecord rake任务能够成功地连接到数据库,则是例外。
https://stackoverflow.com/questions/69093959
复制相似问题