Estou tentando criar uma tarefa de rake personalizada, mas parece que não tenho acesso aos meus modelos. Eu pensei que isso era algo implicitamente incluído na tarefa de trilhos.
Eu tenho o seguinte código em lib / tasks / test.rake:
namespace :test do
task :new_task do
puts Parent.all.inspect
end
end
E aqui está a aparência do meu modelo pai:
class Parent < ActiveRecord::Base
has_many :children
end
É um exemplo bastante simples, mas recebo o seguinte erro:
/> rake test:new_task
(in /Users/arash/Documents/dev/soft_deletes)
rake aborted!
uninitialized constant Parent
(See full trace by running task with --trace)
Alguma ideia? obrigado
ruby-on-rails
activerecord
rake
task
gmoniey
fonte
fonte
new_task
ao ambiente atual? qual é o valor atual de:environment
? O Google não está ajudando.new_task
, carregue o ambiente (carregue seus modelos) primeiro e depois execute new_task.pode ser necessário solicitar sua configuração (que deve especificar todos os modelos necessários, etc.)
por exemplo:
alternativamente, você pode apenas solicitar cada um separadamente, mas pode ter problemas ambientais que a AR não está configurada etc.)
fonte
Quando você começar a escrever suas tarefas de rake , use um gerador para eliminá-las.
Por exemplo:
Você receberá um stub criado em lib / tasks chamado
my_tasks.rake
(obviamente, use seu próprio espaço para nome).Todos os seus modelos de trilhos etc. estarão disponíveis para o ambiente atual em cada bloco de tarefas, a menos que você esteja usando o ambiente de produção ; nesse caso, você precisará exigir os modelos específicos que deseja usar. Faça isso dentro do corpo da tarefa. (IIRC, isso varia entre as diferentes versões do Rails.)
fonte
environment
é necessário como uma dependência e, em seguida, dizer a sintaxe, em vez de incentivar o OP a confiar em utilitários "mágicos" que nem sequer usam magia?Com a nova sintaxe do ruby hash (Ruby 1.9), o ambiente será adicionado assim à tarefa rake:
fonte
A dependência: environment é chamada corretamente, mas o rake ainda pode não saber sobre outras gemas das quais seus modelos dependem - em um caso meu, 'protected_attributes'.
A resposta é executar:
Isso garante que o ambiente inclua quaisquer gemas especificadas no seu Gemfile.
fonte
Gere tarefa usando o comando abaixo (namespace com nome da tarefa):
Use a sintaxe abaixo para adicionar lógica:
Execute a tarefa acima usando o comando abaixo:
ou
fonte