0

我試圖從我的應用程序的rake任務中的gem(geocoder https://github.com/alexreisner/geocoder)添加一個rake任務,因爲我希望在構建數據庫之後運行該任務。從應用程序rake任務運行gems rake任務

所以我有一個Rake文件

task :geolocal do 
    spec = Gem::Specification.find_by_name 'geocoder' 
    load "#{spec.gem_dir}/lib/tasks/geocoder.rake" 
    puts '##################GEOCODING##############' 
    Rake::Task["geocode:all CLASS=ProposedAccomodation"].execute 
end 

這裏面的代碼只是開始關注此問題Ruby Rake load tasks from a gem 但我不斷收到同樣的錯誤

Don't know how to build task 'geocode:all CLASS=ProposedAccomodation' 

任何線索我做錯了嗎?

+0

[Rake Execute With Multiple Arguments]可能重複(http://stackoverflow.com/questions/8033303/rake-execute-with-multiple-arguments) – phoet 2014-10-10 12:43:24

+0

您必須將該類作爲參數傳遞才能執行。 – phoet 2014-10-10 12:43:48

+0

@phoet我試圖從一個小時來指定參數,以不同的方式,在你鏈接的問題中看到,以及這些http://stackoverflow.com/questions/825748/how-do-i-pass -command-line-arguments-to-rake-task,但我不斷收到'請指定CLASS(模型)'錯誤。 (Rake :: TaskArguments.new(stuff_args.keys,stuff_args),這是我最後一次嘗試的:'Rake :: Task [「geocode:all」]。(Rake :: TaskArguments.new(stuff_args.keys,stuff_args .values))'任何線索? – sissy 2014-10-10 14:36:42

回答

0

所以這裏有幾件事情需要考慮。

備案,這就是你怎麼罵與你的情況的論點

Rake::Task["taskname"].execute(args) 

任務,我沒有第一次意識到,它實際上使用環境變量,而不是被理解爲ENV['CLASS']任務參數。

將回答您的問題,因此您可以將其設置爲ENV['CLASS'] = 'ClassName'或將其傳遞給您撥打耙子任務rake geolocal CLASS=ProposedAccomodation的電話。

這給我帶來了一個下面的問題:爲什麼你不只是調用原始的rake任務,你沒有添加任何東西。

+0

我明白了。這實際上是工作,在ENV ['CLASS'] ='Class'這樣的任務中設置參數,這正是我所需要的。在單個rake任務中完成它的好處是,我有幾次調用我想要組合在一起的相同任務,並以這種方式工作。謝謝 – sissy 2014-10-13 09:22:54