2012-07-26 152 views
0

我有一個耙子任務,每隔幾個小時就會更改首頁上的數據。我已經測試過了,它在開發中可以正常工作。但它在生產中不起作用。我需要做些什麼才能獲得我想要看到的更改?我應該添加一個重新啓動服務器的命令嗎?這會使服務器確認更改嗎?有沒有更聰明的方法來做到這一點?Rake任務在開發中工作,但不在生產中

耙子任務如下。它將由heroku的調度程序添加運行,所以它現在位於lib/tasks/scheduler.rake文件中。

desc 'changes the meta tags' 
task :mixup_meta_tags => :environment do 
    regex = /@meta_tag/ 
    file = File.open('app/controllers/site_controller.rb', 'r') 
    lines = [] 
    file.each_line do |line| 
    (line =~ regex) ? (lines << replace_line(line)) : (lines << line) 
    end 
    file.close 
    file = File.open('app/controllers/site_controller.rb', 'w') 
    lines.each{|line| file.write line} 
    file.close 
end 

def replace_line(line) 
    meta_tags = MetaTag.all.map { |tag| tag["tag"] } 
    new_tag = meta_tags.sample(1)[0] 
    line = " @meta_tag = \"#{new_tag}\" \n" # added the newline 
end 
+0

更確切地說...首先發布你的rake任務代碼,以及如何運行它。您不應該重新啓動服務器來運行任務。 – 2012-07-26 11:56:23

+0

沒問題。剛添加rake任務發佈。 – 2012-07-26 12:39:58

回答

1

是的,對生產中Rails應用程序的更改需要重新啓動才能被服務器接收。爲了讓這個工作在飛行中,你可能想嘗試在這篇文章中提到的解決方案why-does-code-need-to-be-reloaded-in-rails-3

+0

據我瞭解,擁有':environment'可以讓任務在任何環境下運行,而如果我有':production',則只能用於生產環境。 – 2012-07-26 14:44:27

+0

:環境加載任務的當前Rails環境。所以'rake mix_up_meta_tags RAILS_ENV = production'會加載生產環境,'rake mix_up_meta_tags'會加載開發,因爲它是默認的。 – rant 2012-07-26 15:49:34

+0

爲了澄清,我的意思是在開發過程中控制器的變化立即得到應用,所以當你運行你的任務並且它改變你的site_controller時,你不必重新啓動服務器。但是,在生產中,您需要重新啓動服務器以獲取對site_controller的更改。 – rant 2012-07-26 16:02:06

相關問題