Rake任务适用于开发,但不适用于生产

时间:2012-07-26 11:22:37

标签: ruby-on-rails rake

我有一个rake任务,每隔几个小时就会在主页上更改数据。我已经测试了它,它在开发中运行良好。但它在生产中不起作用。我需要做些什么来获得我想要看到的变化?我应该添加重启服务器的命令吗?这会让服务器承认这一变化吗?有更聪明的方法吗?

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

1 个答案:

答案 0 :(得分:1)

是的,对生产中的Rails应用程序的更改需要重新启动才能被服务器接收。为了使其能够动态运行,您可能需要尝试本文why-does-code-need-to-be-reloaded-in-rails-3

中提到的解决方案