0

コントローラで定義されているメタタグを変更するrakeタスクに取り組んでいます。ここでいくつかのヘルプを見つけましたが、それでもエラーが発生します。このrakeタスクを実行しようとすると、rubyは「found=」で始まる11行目を好みません。このエラーが発生します。

rake aborted!
undefined local variable or method `line' for main:Object
/Users/********/lib/tasks/meta_tags.rake:11:in `block (2 levels) in <top (required)>'

これは、タスクがどのように見えるかです。なぜ「行」が前の最初の行(10)で正しく解釈されるのか混乱していますが、11で爆発します。何かアイデアはありますか?

require 'rake'
namespace :meta_tags do
  desc 'changes the meta tags'
  task :update => :environment do  
    regex = /^@meta_tag/
    found = false
    file = File.open('app/controllers/site_controller.rb', 'w')
    file.each_line |line|
      replace_line(line) if(found)
      found = true if(line =~ regex)
    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}"
    end
end
4

1 に答える 1

2

イテレーションに追加するのを忘れましたdo...関連しているかどうかはわかりませんが、rubyインタープリターが原因で奇妙なエラーをスローすることがあります。

file.each_line do |line|
  replace_line(line) if(found)
  found = true if(line =~ regex)
end

アップデート:

また、タスクブロックを閉じる必要があるようです。

require 'rake'
namespace :meta_tags do
  desc 'changes the meta tags'
  task :update => :environment do  
    regex = /^@meta_tag/
    found = false
    file = File.open('app/controllers/site_controller.rb', 'w')
    file.each_line do |line|
      replace_line(line) if(found)
      found = true if(line =~ regex)
    end
  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}"
  end
end
于 2012-07-17T14:48:20.703 に答える