新手问题 rails server 不载入 .rake 文件?

u1453357893 · 2016年03月31日 · 最后由 zhangsm 回复于 2016年04月01日 · 2061 次阅读

我想在 action 里边儿运行一个 rake 脚本,这样能实现吗? 执行下边儿命令出现:RuntimeError: Don't know how to build task 'init_sum_message'

Rake::Task['init_sum_message']  

在 Rakefile 看了看,里面是这样的

# Add your own tasks in files placed in lib/tasks ending in .rake,
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.

require File.expand_path('../config/application', __FILE__)

Rails.application.load_tasks

注释的意思说的不就是 rake 可以直接用的吗?

你试一下这种调用呢

Rake::Task["init_sum_message"].invoke

或者你用下面的方式调用

%x(bundle exec rake init_sum_message)
2 楼 已删除

我一般调一个 shell cmd = "RAILS_ENV=#{Rails.env} rake xxx" stdin , stdout , pid = PTY.spawn(cmd)

#1 楼 @haoxilu 这样做是可以的,不过不打算这样做了,这种耗时任务对线程阻塞太严重了

#3 楼 @nine 不错的建议,不过打算用异步做了,塞在队列里应该是最好的选择

require 'rake'

# Rake::Task.clear # necessary to avoid tasks being loaded several times in dev mode
Demo::Application.load_tasks
begin
  Rake::Task['demo:contents_collect'].reenable  # 允许多次调用
  Rake::Task['demo:contents_collect'].invoke
rescue Exception => e
  Rails.logger.error "采集终止 , #{e.inspect}"
end
需要 登录 后方可回复, 如果你还没有账号请 注册新账号