Pergunta

Eu tenho uma aplicação em que attr_accessor está sendo usado para manter dados temporários para um modelo que será passado para uma tarefa rake. Vendo que não há um campo de banco de dados para esses atributos e eles não estão sendo calculados a partir de dados do banco de dados, irá manter os dados attr_accessor e estar disponível para a tarefa rake? O que acontece se eu precisar reiniciar o servidor - se os dados se perder em seguida, se não for salvo no banco de dados? Ou para conseguir isso, eu preciso me quer salvar para um arquivo temporário ou um campo de banco de dados?

Foi útil?

Solução

Eu suponho que você está perguntando se os dados que são armazenados em atributos do ActiveRecord objetos decorrentes de solicitações da Web estará disponível quando estiver acessando-os através de uma tarefa Rake?

No. Eles não vão. Que os dados não vai mesmo estar disponível para a próxima solicitação da web. Que os dados não vai mesmo estar lá se você carregar o mesmo registro duas vezes.

class Thing < ActiveRecord::Base
  attr_accessor :data
end

#try this in script/console
thing = Thing.find(:first)
thing.data = "Something"
thing = Thing.find(:first)

puts thing.data
-> nil

Outras dicas

Depende de como você está passando seus dados para a tarefa rake e por quê. Se a sua tentativa de fazer o trabalho out-of-band com o pedido, ou seja, não fazer o usuário esperar até a sua completa eu recomendo dar uma olhada no excelente screencast de Ryan aqui http://railscasts.com/episodes/128-starling-and-workling para aprender sobre filas de trabalhos .

Se o seu alguma outra razão exótica você deve usar ancinho como este que você poderia passar os dados como parâmetros de linha de comando. Isso depende da quantidade de dados, e sua complexidade, você precisa passar como poderia sair da mão rapidamente.

Usando o exemplo de Daniel de cima:

coisa = Thing.find (: em primeiro lugar) thing.data = "Something"

rake myraketask thing_id=#{thing.id} data=#{thing.data}

Claro que vai ser perdido, onde você acha que os dados vai quando morre? Para um h de dados (e) aven de onde ele pode sempre voltar?

Eu gostaria de saber o que você precisa dos dados para, mas a resposta final é provavelmente que os dados pertencem no db, a menos que seja grandes dados binários, como imagens, onde você deve guardá-lo no sistema de arquivos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top