相关疑难解决方法(0)

如何在Rails环境中将参数传递给Rake任务?

我能够传递如下参数:

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)

但这不是一个有效的任务调用.有谁知道我怎么能做到这一点?

ruby rake ruby-on-rails

210
推荐指数
5
解决办法
9万
查看次数

ActiveRecord:从控制台列出表中的列

我知道您可以要求ActiveRecord使用以下命令在控制台中列出表:

ActiveRecord::Base.connection.tables
Run Code Online (Sandbox Code Playgroud)

是否有一个命令可以列出给定表中的列?

sql activerecord ruby-on-rails ruby-on-rails-3

105
推荐指数
5
解决办法
7万
查看次数

我可以将参数传递给rake db:seed吗?

我的一部分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 ruby-on-rails seeding rakefile

30
推荐指数
1
解决办法
5754
查看次数

如何将命名参数传递给Rake任务?

有没有办法在不使用环境变量的情况下将命名参数传递给Rake任务?

我知道Rake任务可以接受两种格式的参数:

环境变量

$ rake my_task foo=bar
Run Code Online (Sandbox Code Playgroud)

这将创建名称的环境变量foo和值bar可在Rake任务进行访问my_taskENV['foo'].

耙任务参数

$ rake my_task['foo','bar']
Run Code Online (Sandbox Code Playgroud)

此传递的值foobar前两个任务参数(如果它们被定义).如果my_task被定义为:

task :my_task, :argument_1, :argument_2
Run Code Online (Sandbox Code Playgroud)

然后argument_1会有价值foo,argument_2并具有价值bar.

ruby rake arguments task named-parameters

25
推荐指数
1
解决办法
6790
查看次数

将一个或两个参数传递给Rake任务

我有一个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 ruby-on-rails

20
推荐指数
1
解决办法
9256
查看次数

具有多个参数和模型访问的Rake任务不起作用

运行我的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我看不到我的佣金任务

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

16
推荐指数
1
解决办法
3386
查看次数

使用一些参数运行rails runner

这个命令是我的问题:

/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)

ruby linux bash command-line ruby-on-rails

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

如何使用OptionParser解析rake参数

提供我试图用来解析参数的答案.我从那里简化了示例,我不得不添加两个以使其工作.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)

ruby rake ruby-on-rails rake-task

8
推荐指数
1
解决办法
3054
查看次数

耙子流产了!undefined方法`map':name:Symbol

我正在尝试将参数传递给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 ruby-on-rails-3

7
推荐指数
1
解决办法
8104
查看次数

是否可以在不使用环境变量的情况下向`rake cucumber`发送参数?

我看到可以将参数传递给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)

并让它只运行那些标签.大多数消息来源说使用环境变量,我已经做过,但我更愿意只是以"正确"的方式提供参数.

rake ruby-on-rails cucumber

7
推荐指数
2
解决办法
2544
查看次数

使用Rspec测试rake任务不接受参数

根据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任务的方式有什么问题? …

ruby rake rspec ruby-on-rails rake-task

5
推荐指数
2
解决办法
2128
查看次数

如何使用参数和依赖项定义 Rake 任务

我寻找这个高点和低点,特别是具有依赖项和任务参数的 RSpec rake 任务 - 找到了答案并帮助后代

基本上我想按标签过滤测试,并传入我用于某些特定于应用程序的行为的触发器。

bundle exec rake spec[some_tag,some_trigger]
Run Code Online (Sandbox Code Playgroud)

我想依赖 :clean 和 'test-reports' 任务

ruby rake rspec

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