我能够传递如下参数:
desc "Testing args"
task: :hello, :user, :message do |t, args|
args.with_defaults(:message => "Thanks for logging on")
puts "Hello #{args[:user]}. #{:message}"
end
Run Code Online (Sandbox Code Playgroud)
我还能够为Rails应用程序加载当前环境
desc "Testing environment"
task: :hello => :environment do
puts "Hello #{User.first.name}."
end
Run Code Online (Sandbox Code Playgroud)
我想做的是能够拥有变量和环境
desc "Testing environment and variables"
task: :hello => :environment, :message do |t, args|
args.with_defaults(:message => "Thanks for logging on")
puts "Hello #{User.first.name}. #{:message}"
end
Run Code Online (Sandbox Code Playgroud)
但这不是一个有效的任务调用.有谁知道我怎么能做到这一点?
我知道您可以要求ActiveRecord使用以下命令在控制台中列出表:
ActiveRecord::Base.connection.tables
Run Code Online (Sandbox Code Playgroud)
是否有一个命令可以列出给定表中的列?
我的一部分seeds.rb将大量数据加载到数据库中.我希望能够有选择地加载这些数据.例如
$ rake db:seed
Run Code Online (Sandbox Code Playgroud)
要么
$rake db:seed[0]
Run Code Online (Sandbox Code Playgroud)
只会加载必要的数据来运行网站
$ rake db:seed[1]
Run Code Online (Sandbox Code Playgroud)
我也会将我的大数据文件加载到数据库中.这可能吗?我怎样才能做到这一点?如果没有,谁能想到办法做我想做的事情?
有没有办法在不使用环境变量的情况下将命名参数传递给Rake任务?
我知道Rake任务可以接受两种格式的参数:
环境变量
$ rake my_task foo=bar
Run Code Online (Sandbox Code Playgroud)
这将创建名称的环境变量foo和值bar可在Rake任务进行访问my_task的ENV['foo'].
耙任务参数
$ rake my_task['foo','bar']
Run Code Online (Sandbox Code Playgroud)
此传递的值foo与bar前两个任务参数(如果它们被定义).如果my_task被定义为:
task :my_task, :argument_1, :argument_2
Run Code Online (Sandbox Code Playgroud)
然后argument_1会有价值foo,argument_2并具有价值bar.
我有一个rake任务,我想传递参数.例如,我想发出一个命令
<prompt> rake db:do_something 1
Run Code Online (Sandbox Code Playgroud)
在rake任务中:
...
cust = Customer.find( the_id_passed_in )
# do something with this customer record, etc...
...
Run Code Online (Sandbox Code Playgroud)
很简单,对吧?
运行我的rake任务时出现以下错误
rake store_reports["1", "2"]
rake aborted!
Don't know how to build task 'store_reports[1,'
Run Code Online (Sandbox Code Playgroud)
我的rake任务需要2个参数,需要访问其中的模型.这是任务
task :store_reports, [:start_date, :end_date] => :environment do |t, args|
puts args.start_date
end
Run Code Online (Sandbox Code Playgroud)
我引用了两个stackoverflow问题,但第一个答案没有用,在第二个答案中,作者似乎已经解决了,但他从未发布过他的答案.
耙子流产了!undefined方法`map'for:name: 带有多个参数的符号rake任务 - 我卡住了
这是一些额外的信息.我跑的地方,rake -T我看不到我的佣金任务
这个命令是我的问题:
/usr/local/bin/ruby **script/runner** --environment=production app/jobs/**my_job.rb** -t my_arg
`my_job.rb` is my script, which handles command line arguments. In this case it is `-t my_arg`.
Run Code Online (Sandbox Code Playgroud)
my_job.rb也需要`--environment = production'作为参数,这应该是script/runner的参数.
我想这可以用一些括号来解决,但没有一个想法.
如果解决方案没有触及(或依赖于)Rails或Linux的全局环境,那就更好了.
/usr/local/lib/ruby/1.8/optparse.rb:1450:in `complete': invalid option: --environment=production (OptionParser::InvalidOption)
from /usr/local/lib/ruby/1.8/optparse.rb:1448:in `catch'
from /usr/local/lib/ruby/1.8/optparse.rb:1448:in `complete'
from /usr/local/lib/ruby/1.8/optparse.rb:1261:in `parse_in_order'
from /usr/local/lib/ruby/1.8/optparse.rb:1254:in `catch'
from /usr/local/lib/ruby/1.8/optparse.rb:1254:in `parse_in_order'
from /usr/local/lib/ruby/1.8/optparse.rb:1248:in `order!'
from /usr/local/lib/ruby/1.8/optparse.rb:1339:in `permute!'
from /usr/local/lib/ruby/1.8/optparse.rb:1360:in `parse!'
from app/jobs/2new_error_log_rt_report.rb:12:in `execute'
from app/jobs/2new_error_log_rt_report.rb:102
from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `eval'
from /home/www/maldive/admin/releases/20120914030956/vendor/rails/railties/lib/commands/runner.rb:46
from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
from script/runner:3
Run Code Online (Sandbox Code Playgroud) 提供我试图用来解析参数的答案.我从那里简化了示例,我不得不添加两个以使其工作.OptionParserrakeARGV.shift
require 'optparse'
namespace :user do |args|
# Fix I hate to have here
puts "ARGV: #{ARGV}"
ARGV.shift
ARGV.shift
puts "ARGV: #{ARGV}"
desc 'Creates user account with given credentials: rake user:create'
# environment is required to have access to Rails models
task :create => :environment do
options = {}
OptionParser.new(args) do |opts|
opts.banner = "Usage: rake user:create [options]"
opts.on("-u", "--user {username}","Username") { |user| options[:user] = user }
end.parse!
puts "user: #{options[:user]}"
exit 0
end
end …Run Code Online (Sandbox Code Playgroud) 我正在尝试将参数传递给Rake任务并访问我的模型,如" 如何将命令行参数传递给rake任务 "和" 执行rails rake任务提供对ActiveRecord模型的访问权限? "中所述.
但是添加=> :environment到此代码:
require 'rake'
namespace :genre do
desc "Add a genre"
task :add, :genre_id, :name => :environment do |t, args|
puts args.name
end
end
Run Code Online (Sandbox Code Playgroud)
运行任务时给我这个错误:
rake genre:add['1','Abc']
rake aborted!
undefined method `map' for :name:Symbol
(See full trace by running task with --trace)
Run Code Online (Sandbox Code Playgroud)
如果我删除=> :environment它就可以了.
更新:
跟踪:
rake --trace genre:add['1','Abc']
rake aborted!
undefined method `map' for :name:Symbol
/Users/user/.rvm/gems/ruby-1.9.2-p318/gems/rake-0.9.2.2/lib/rake/task.rb:254:in `set_arg_names'
/Users/user/.rvm/gems/ruby-1.9.2-p318/gems/rake-0.9.2.2/lib/rake/task_manager.rb:29:in `define_task'
/Users/user/.rvm/gems/ruby-1.9.2-p318/gems/rake-0.9.2.2/lib/rake/task.rb:310:in `define_task'
/Users/user/.rvm/gems/ruby-1.9.2-p318/gems/rake-0.9.2.2/lib/rake/dsl_definition.rb:32:in `task'
/private/var/www/html/someapp.com/subdomains/someapp.heroku.com/someapp/lib/tasks/genre.rake:5:in `block in <top (required)>'
/Users/user/.rvm/gems/ruby-1.9.2-p318/gems/rake-0.9.2.2/lib/rake/task_manager.rb:207:in …Run Code Online (Sandbox Code Playgroud) 我看到可以将参数传递给rake任务:
task :task_name, :arg_name do |t, args|
Run Code Online (Sandbox Code Playgroud)
我想做的是将参数传递给黄瓜耙任务:
Cucumber::Rake::Task.new({:tags => 'db:test:prepare'}) do |t, args|
t.cucumber_opts = ['--tags', #args?]
end
Run Code Online (Sandbox Code Playgroud)
这种事情有可能吗?这样我可以这样做:
rake cucumber:tags['tag1', 'tag2', ...]
Run Code Online (Sandbox Code Playgroud)
并让它只运行那些标签.大多数消息来源说使用环境变量,我已经做过,但我更愿意只是以"正确"的方式提供参数.
根据Stephen Hagemann的这篇文章,我正试图为我的一个rake任务写一个Rspec测试.
lib/tasks/retry.rake:
namespace :retry do
task :message, [:message_id] => [:environment] do |t, args|
TextMessage.new.resend!(args[:message_id])
end
end
Run Code Online (Sandbox Code Playgroud)
spec/tasks/retry_spec.rb:
require 'rails_helper'
require 'rake'
describe 'retry namespace rake task' do
describe 'retry:message' do
before do
load File.expand_path("../../../lib/tasks/retry.rake", __FILE__)
Rake::Task.define_task(:environment)
end
it 'should call the resend action on the message with the specified message_id' do
message_id = "5"
expect_any_instance_of(TextMessage).to receive(:resend!).with message_id
Rake::Task["retry:message[#{message_id}]"].invoke
end
end
end
Run Code Online (Sandbox Code Playgroud)
但是,当我运行此测试时,我收到以下错误:
Don't know how to build task 'retry:message[5]'
Run Code Online (Sandbox Code Playgroud)
另一方面,当我运行没有参数的任务时:
Rake::Task["retry:message"].invoke
Run Code Online (Sandbox Code Playgroud)
我能够调用rake任务,但测试失败,因为没有message_id.
我将参数传递给rake任务的方式有什么问题? …
我寻找这个高点和低点,特别是具有依赖项和任务参数的 RSpec rake 任务 - 找到了答案并帮助后代
基本上我想按标签过滤测试,并传入我用于某些特定于应用程序的行为的触发器。
bundle exec rake spec[some_tag,some_trigger]
Run Code Online (Sandbox Code Playgroud)
我想依赖 :clean 和 'test-reports' 任务