rake任务无法正常工作的自毁功能

时间:2014-09-25 17:51:42

标签: javascript ruby-on-rails rake-task

我正在尝试在我的待办事项列表应用程序中创建一个功能,其中待办事项将在7天后自毁。然而,根据我目前的代码,日期从todo创建之日算起,而不是倒计时然后被销毁。关于如何解决这个问题的任何想法将非常感激。

以下是我的todo部分观点:

 <tr id="<%= dom_id(todo)%>">
    <td><%= todo.description %></td>
    <td><%= distance_of_time_in_words_to_now(todo.created_at + 7.days) %></td>
    <td><%= link_to "Completed", todo, method: :delete, remote: true, class: "btn btn-success" %></td>
  </tr>

这是我的佣金任务代码:

desc 'Removes items over a week old'
task delete_items: :environment do
  Todo.where("created_at <= ?", Time.now - 7.days).destroy_all
end

这是我的destroy.js.erb文件:

<% if @todo.destroyed? %>
   $('#todo_' +<%= @todo.id %>).hide();
   $('.alert').html("<button type='button' class='close' data-dismiss='alert'>&times;</button><%= flash[:notice] %>");
   $('.alert').addClass('alert-success');
   $('.alert').removeClass('remove');
<% else %>
   $('.alert').html("<button type='button' class='close' data-dismiss='alert'>&times;</button><%= flash[:error] %>");
   $('.alert').addClass('alert-danger');
   $('.alert').removeClass('remove');
<% end %>

这是我的create.js.erb文件:

 <% if @todo.valid? %>
   $('.js-todos').prepend("<%= escape_javascript(render(@todo)) %>");
   $('.new-todo').html("<%= escape_javascript(render partial: 'todos/form') %>");
   $('.alert').html("<button type='button' class='close' data-dismiss='alert'>&times;</button><%= flash[:notice] %>");
   $('.alert').addClass('alert-success');
   $('.alert').removeClass('remove');
 <% else %>
   $('.alert').html("<button type='button' class='close' data-dismiss='alert'>&times;</button><%= flash[:error] %>");
   $('.alert').addClass('alert-danger');
   $('.alert').removeClass('remove');
   $('.new-todo').html("<%= escape_javascript(render partial: 'todos/form') %>")
 <% end %>

如果您需要查看任何其他文件,请与我们联系。再次感谢!

编辑:添加文件:

这是我的schedule.rb代码:

set :output, "#{path}/log/cron.log"

every 1.day do
  rake "delete_items"
end

这是我的新deploy.rb文件:

require "bundler/capistrano"

set :whenever_command, "bundle exec whenever"
require "whenever/capistrano"

# config valid only for Capistrano 3.1
lock '3.2.1'

set :application, 'my_app_name'
set :repo_url, 'git@example.com:me/my_repo.git'

我是否需要填写set:application / set:repo_url以使deploy.rb文件正常工作?谢谢!

1 个答案:

答案 0 :(得分:0)

你的桌子总是很重要。忘记distance_of_time_in_words方法的实现复杂性,只考虑它的含义:如果你今天创建一个项目,它明天的距离将是1天。然后是后天的2天。然后3天。在创建的时间内添加7天将使其为-6天,然后为-5天等。(忽略d_o_t_i_w_f_n格式化的方式)。当你点击0时,todo应该被删除,并且不会显示在表格上,但表格只是显示东西 - 它与项目是否被删除没有关系;它只是通知用户。删除由您编写的rake任务处理,该任务似乎在 运行时正常工作。

听起来问题是你的任务根本没有运行。当您手动运行它时,根据您的报告,它正在运行,但您的计划程序无法定期运行它。你好吗?调度程序是否在本地和生产环境中都不起作用?您使用什么工具来安排,以及如何使用它们?

因为您的表格和日程安排程序是单独的问题,我建议您提出一个关于佣金调度失败的新问题,您可以在其中发布您的日程安排代码(您使用的是什么宝石?如何使用它们?什么?是在本地和生产中明确地(在调度程序之外)运行任务的行为?),并尝试确定rake任务失败的调度的哪个部分。

你的表似乎基本上是正确的。如果它没有显示所需的单词/数字,那只是distance_of_time_in_words方法的一个功能,以及你如何使用它。也许在Rails控制台中试验一下:

include ActionView::Helpers::DateHelper # Module of which d_o_t_i_w_f_n is a method
distance_of_time_in_words_from_now(5.days.ago)
distance_of_time_in_words_from_now(24.hours.from_now)

您想要删除的项目在表格中显示的事实可能与调度无关,而与表逻辑无关,因此在该问题中,我将专注于调度。