gmo*_*iey 224 rake activerecord ruby-on-rails task
我正在尝试创建自定义rake任务,但似乎我无法访问我的模型.我认为这是rails任务中隐含的内容.
我在lib/tasks/test.rake中有以下代码:
namespace :test do
task :new_task do
puts Parent.all.inspect
end
end
Run Code Online (Sandbox Code Playgroud)
这是我的父模型的样子:
class Parent < ActiveRecord::Base
has_many :children
end
Run Code Online (Sandbox Code Playgroud)
这是一个非常简单的例子,但我收到以下错误:
/> rake test:new_task
(in /Users/arash/Documents/dev/soft_deletes)
rake aborted!
uninitialized constant Parent
(See full trace by running task with --trace)
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?谢谢
gmo*_*iey 394
想出来,任务看起来应该是这样的:
namespace :test do
task :new_task => :environment do
puts Parent.all.inspect
end
end
Run Code Online (Sandbox Code Playgroud)
注意=> :environment添加到任务的 依赖项
Luk*_*fer 16
您可能需要您的配置(应指定所有必需的模型等)
例如:
require 'config/environment'
Run Code Online (Sandbox Code Playgroud)
或者你可以单独要求每个,但你可能有环境问题AR没有设置等)
oco*_*odo 11
当您开始编写rake任务时,请使用生成器将它们存根.
例如:
rails g task my_tasks task_one task_two task_three
Run Code Online (Sandbox Code Playgroud)
你会得到一个在lib/tasks中创建的存根my_tasks.rake(显然使用你自己的命名空间.)这将是这样的:
namespace :my_tasks do
desc "TODO"
task :task_one => :environment do
end
desc "TODO"
task :task_two => :environment do
end
desc "TODO"
task :task_three => :environment do
end
end
Run Code Online (Sandbox Code Playgroud)
除非您使用的是生产环境,否则您的所有轨道模型等都将从每个任务块中可用于当前环境,在这种情况下,您需要使用要使用的特定模型.在任务的主体内执行此操作.(IIRC在不同版本的Rails之间有所不同.)
小智 6
使用以下命令生成任务(带有任务名称的命名空间):
rails g task test new_task
Run Code Online (Sandbox Code Playgroud)
使用以下语法添加逻辑:
namespace :test do
desc 'Test new task'
task new_task: :environment do
puts Parent.all.inspect
end
end
Run Code Online (Sandbox Code Playgroud)
使用以下命令运行上述任务:
bundle exec rake test:new_task
Run Code Online (Sandbox Code Playgroud)
或者
rake test:new_task
Run Code Online (Sandbox Code Playgroud)
使用新的 ruby 哈希语法(Ruby 1.9),环境将像这样添加到 rake 任务中:
namespace :test do
task new_task: :environment do
puts Parent.all.inspect
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
50784 次 |
| 最近记录: |