gpt4 book ai didi

ruby-on-rails - rake 中止! ActiveRecord::StatementInvalid: SQLite3::SQLException: 没有这样的表:无法让 Rake Automation 工作

转载 作者:数据小太阳 更新时间:2023-10-29 08:03:29 25 4
gpt4 key购买 nike

我正在制作一个待办事项列表应用程序,我正在尝试实现一项功能,如果待办事项列表项在 7 天后未在该时间段内完成,它将自动删除。我试图在“随时”gem 的帮助下使用 rake 自动化,但是我收到以下错误:

rake aborted!
ActiveRecord::StatementInvalid: SQLite3::SQLException: no such table: items: SELECT "items".* FROM "items" WHERE (created_at <= '2015-08-18 23:26:04.639414')

这是完整的堆栈跟踪: https://gist.github.com/jlquaccia/0ac0eaa2b1d639fc514e

您还可以查看我在 Github 上的最新提交 here

我对 RoR 还是有点陌生​​,对错误消息感到困惑,因为我已经创建了一个名为 items 的表.

db/migrate/20150817215220_create_items.rb:

class CreateItems < ActiveRecord::Migration
def change
create_table :items do |t|
t.string :name
t.references :user, index: true

t.timestamps
end
end
end

有人可以帮忙吗?在我决定在这里问之前,我今天已经在这个问题上旋转了一段时间。

更新

我已经完全重置了我的数据库,在开发和生产中再次重新迁移,还重新创建了新的用户和项目。我知道在运行我的 rake 自动化时不再收到错误(这次似乎一切都顺利迁移)。然而,我的 rake 自动化仍然不起作用..

我返回并在我的 rake 任务中添加了打印语句,以帮助更深入地了解事物:

puts Item.where("created_at <= ?", Time.now - 7.days).inspect

手动运行此任务时,我得到:

输入:rake todo:delete_items

输出:#<ActiveRecord::Relation [#<Item id: 2, name: "Milk", user_id: 1, created_at: "2015-08-24 18:16:25", updated_at: "2015-08-31 18:16:25">]>

这证明 rake 任务在手动运行时确实有效。

然而,当我去自动化这个任务时:

日程表.rb:

every :day, :at => '12:09 pm' do
rake "todo:delete_items"
end

没有任何反应,但我确实在终端中收到一条消息。

Mail version 8.1 6/6/93.  Type ? for help.
"/var/mail/Jason": 1 message 1 new
>N 1 Jason@jason-quaccias Mon Aug 31 12:09 19/900 "Cron <Jason@jason-quaccias-macbook-pro> /bin/bash -l -c 'cd /Users/Jason/code/projects/blocitoff && RAILS_ENV=production bundle exec rake todo:de"
?
Message 1:
From Jason@jason-quaccias-macbook-pro.local Mon Aug 31 12:09:18 2015
X-Original-To: Jason
Delivered-To: Jason@jason-quaccias-macbook-pro.local
From: Jason@jason-quaccias-macbook-pro.local (Cron Daemon)
To: Jason@jason-quaccias-macbook-pro.local
Subject: Cron <Jason@jason-quaccias-macbook-pro> /bin/bash -l -c 'cd /Users/Jason/code/projects/blocitoff && RAILS_ENV=production bundle exec rake todo:delete_items --silent'
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=Jason>
X-Cron-Env: <USER=Jason>
X-Cron-Env: <HOME=/Users/Jason>
Date: Mon, 31 Aug 2015 12:09:15 -0700 (PDT)

#<ActiveRecord::Relation []>

注意消息的最后一行#<ActiveRecord::Relation []>我可以看出我的 rake automation 确实运行并打印出它找不到与任何大于等于 7 天的项目的匹配项。

然而,事实并非如此。在自动化我的 rake 任务之前,我通过运行 Heroku rails 控制台确保生产中存在一个超过 7 天的项目。

irb(main):003:0> u_items.find_by(id: 1)
=> #<Item id: 1, name: "Bread", user_id: 3, created_at: "2015-08-22 22:32:55", updated_at: "2015-08-30 22:32:55">

这很清楚,因为 created_at 属性显示为 "2015-08-22 22:32:55"

然而,这让我想知道,这个错误现在是否已减少为某种配置错误?似乎我的 rake 任务正在自动运行,但它没有在正确的位置执行。例如。我的 rake 任务没有在我的生产环境中运行。

环境.rb:

# Load the Rails application.
require File.expand_path('../application', __FILE__)

# Initialize the Rails application.
Rails.application.initialize!

待办事项:

namespace :todo do
desc "Delete items older than seven days"
task delete_items: :environment do
# Item.where("created_at <= ?", Time.now - 7.days).destroy_all
puts Item.where("created_at <= ?", Time.now - 7.days).inspect
end
end

最佳答案

ActiveRecord::StatementInvalid: SQLite3::SQLException: no such table: items: SELECT "items".* FROM "items"

从错误消息中可以明显看出 items 表目前在您的数据库中不存在。即使您没有故意删除它,它也会以某种方式被删除。

因此,您应该通过运行相应的迁移再次创建 items 表:

bundle exec rake db:migrate

更新

检查您正在其中运行此 rake 任务的 RAILS_ENV。由于出现错误,这意味着您的数据库中不存在 items 表(看起来这是您的生产数据库)。然后,您必须在该 RAILS_ENV 中运行迁移以创建 items 表:

RAILS_ENV=production bundle exec rake db:migrate

关于ruby-on-rails - rake 中止! ActiveRecord::StatementInvalid: SQLite3::SQLException: 没有这样的表:无法让 Rake Automation 工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32218396/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com