2015-05-13 40 views
1

使用rails 4.2.1在routes.rb更新上調用rake任務?

我想每config/routes.rb文件保存調用一個rake任務。我會如何去做這件事?

注意:rake任務確實需要rails環境。即它具有task :task_name => :environment do #...的性質。

+0

像'警衛'我猜 – apneadiving

+0

怎麼跟這個問題呢? –

+0

@AndreyDeineko尚未解決。我一直認爲'rails'本身檢測到對'routes.rb'文件的改變,並且運行着類似於'Rails.application.reload_routes!'的東西。我想找到調用'reload_routes!'的函數,並擴展它來運行我的'rake'任務。沒有運氣。 – Derek

回答

1

看看filewatcher寶石。

您可以定義取決於什麼樣的變化採取行動,以指定的文件(或目錄)由:

require 'filewatcher' 

FileWatcher.new("config/routes.rb").watch() do |filename, event| 
    if(event == :changed) 
    your_rake_task 
    end 
    if(event == :delete) 
    # ... 
    end 
    if(event == :new) 
    # ... 
    end 
end 
0

rails 4.2.1

# development.rb 
require 'rake' 
Rails.application.configure do 
#... 
    Rails.application.load_tasks 
    # code executes on routes change 
    ActionDispatch::Reloader.to_prepare do 
    Rails.application.reload_routes! 

    if JsRoutes.assert_usable_configuration! 
     Rake::Task['js_routes:generate'].reenable 
     Rake::Task['js_routes:generate'].invoke 
    end 
    end 
#... 
end 

基於客使用的東西https://stackoverflow.com/a/27046271/749477