标签: rake-task

在1.9.3中读取文件时跳过第一行

我正在使用ruby的文件打开并读取rake任务中的文本文件.是否有一个设置,我可以指定我想要跳过文件的第一行?到目前为止,这是我的代码:

desc "Import users." 
  task :import_users => :environment do 
    File.open("users.txt", "r", '\r').each do |line| 
      id, name, age, email = line.strip.split(',') 
      u = User.new(:id => id, :name => name, :age => age, :email => email) 
      u.save 
    end 
  end
Run Code Online (Sandbox Code Playgroud)

我想line.lineno,也这样做File.open("users.txt", "r", '\r').each do |line, index|,并next if index == 0但没有任何运气.

ruby rake-task ruby-1.9.3

14
推荐指数
3
解决办法
1万
查看次数

处理非常长时间运行的rake任务

我有兴趣运行一个非常长时间运行的rake任务,这个任务需要几个小时才能完成,我有兴趣了解处理这个问题的最佳实践.

我找到的可能的解决方案:

  1. 设置一个cron作业
  2. delayed_job的
  3. resque

cron似乎是一个简单的设置解决方案,但它是否适合长期任务?您使用什么以及您的解决方案的优点/缺点是什么?

rake ruby-on-rails delayed-job rake-task

14
推荐指数
1
解决办法
4890
查看次数

删除CSV文件中的空格

我有一个额外的空格字符串:

First,Last,Email  ,Mobile Phone ,Company,Title  ,Street,City,State,Zip,Country, Birthday,Gender ,Contact Type
Run Code Online (Sandbox Code Playgroud)

我想解析这一行并删除空格.

我的代码看起来像:

namespace :db do
task :populate_contacts_csv => :environment do

require 'csv'

csv_text = File.read('file_upload_example.csv')
  csv = CSV.parse(csv_text, :headers => true)
    csv.each do |row|
      puts "First Name: #{row['First']} \nLast Name: #{row['Last']} \nEmail: #{row['Email']}"
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

ruby csv parsing rake-task

12
推荐指数
2
解决办法
7949
查看次数

在Ruby on Rails中为rake任务和测试文件放置辅助函数的位置?

在我的Rails应用程序中,我有一个文件sample_data.rb内部/lib/tasks以及我/spec目录中的一堆测试文件.

所有这些文件通常共享通用功能,例如:

def random_address
  [Faker::Address.street_address, Faker::Address.city].join("\n")
end
Run Code Online (Sandbox Code Playgroud)

我应该把这些辅助功能放在哪里?对此有什么约定吗?

谢谢你的帮助!

ruby rake-task ruby-on-rails-3 ruby-on-rails-3.1 ruby-on-rails-3.2

12
推荐指数
2
解决办法
1万
查看次数

如何在rake任务中包含ActionMailer类?

我想在我的rake任务中使用ActionMailer,以便在特定时间向人们发送电子邮件.

我在app/mailers文件夹中编写了一个邮件程序类,如下所示:

class AlertsMailer < ActionMailer::Base
  default from: 'x@y.com'

  def mail_alert(email_addresses, subject, url)
    @url  = '#{url}'
    mail(to: email_addresses, subject: 'Alert') do |format|
      format.html { render '/alerts/list' }
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

然后我在rake任务中包含以下行:

AlertsMailer.mail_alert(email_addresses, subject)
Run Code Online (Sandbox Code Playgroud)

当我尝试运行rake任务时:

rake update_db
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

uninitialized constant AlertsMailer
Run Code Online (Sandbox Code Playgroud)

我想我必须以某种方式在我的rake任务中加载邮件程序类,但我不知道如何做到这一点.

请帮忙.

ruby ruby-on-rails actionmailer rake-task

11
推荐指数
2
解决办法
6906
查看次数

如何构建任务'db:populate'

  1 namespace :db do
  2   desc "Fill database with sample videos"
  3   task :populate => :environment do
  4     require 'faker'
  5     Rake::Task['db:reset'].invoke
  6     100.times do |n|
  7       headline = Faker::Lorem.sentence(3)
  8       video = Faker::Lorem.words(5)
  9       Video.create!(:headline => headline,
 10                   :video => video)
 11     end
 12   end
 13 end
Run Code Online (Sandbox Code Playgroud)

我目前在lib/tasks/sample_data.rb中有这个rake任务

跑步时rake db:populate我得到错误,Don't know how to build task 'db:populate'.我该如何解决这个问题?

注意:我是Rails/Ruby的新手.我正在使用Rails 3.

rake ruby-on-rails rake-task ruby-on-rails-3

10
推荐指数
1
解决办法
2万
查看次数

测试rake任务中定义的方法

我想测试rake任务中定义的方法.

耙文件

#lib/tasks/simple_task.rake
namespace :xyz do
    task :simple_task => :environment do
        begin
            if task_needs_to_run?
                puts "Lets run this..."
                #some code which I don't wish to test
                ...
            end
        end
    end
    def task_needs_to_run?
        # code that needs testing
        return 2 > 1
    end

end
Run Code Online (Sandbox Code Playgroud)

现在,我想task_needs_to_run?在测试文件中测试这个方法我该怎么做?

附加说明:理想情况下,我希望在rake任务中测试另一个私有方法......但我可以稍后再担心.

testing rake unit-testing ruby-on-rails rake-task

10
推荐指数
2
解决办法
4632
查看次数

耙任务w/splat参数

我正在尝试创建一个rake任务,它接受一个必需的第一个参数,然后我想把它们组合成一个数组的任意数量的附加参数:

rake course["COURSE NAME", 123, 456, 789]
Run Code Online (Sandbox Code Playgroud)

我尝试了以下但args[:numbers]只是一个字符串w/123而不是所有的数字.

task :course, [:name, *:numbers] => :environment do |t, args|
  puts args # {:name=>"COURSE NAME", :numbers=>"123"}
end
Run Code Online (Sandbox Code Playgroud)

ruby rake ruby-on-rails rake-task ruby-on-rails-4

10
推荐指数
1
解决办法
2035
查看次数

rake检查是否已经运行

是否有可能以某种方式执行rake任务只有它还没有运行,我想使用cron执行一些rake任务但是rake任务不应该在前一次调用未完成时启动谢谢

ruby rake ruby-on-rails rake-task ruby-on-rails-3

9
推荐指数
3
解决办法
3251
查看次数

Rails:rake db:test:准备Vs rake测试:准备

作为指南,用于准备测试数据库的命令是

bundle exec rake db:test:prepare
Run Code Online (Sandbox Code Playgroud)

但是,我发现以下命令也适用于我并为我创建了测试数据库.

bundle exec rake test:prepare
Run Code Online (Sandbox Code Playgroud)

如果是的话,想知道这是否是一个有效的命令.我在哪里可以找到文档.

测试 rails 3.2.8

rake ruby-on-rails rake-task ruby-on-rails-3

9
推荐指数
1
解决办法
7160
查看次数