2012-05-30 2 views
6

У меня есть некоторые проблемы с одним из камней, поддерживающим кеширование ActiveModel. Когда я использую наблюдателя для кэшированной модели, во время инициализации приложения он пытается описать таблицу, чтобы получить все имена полей.Как получить имя текущей задачи рейка в моей модели Rails?

То же самое, что и при выполнении рейк-задачи, включая db: migration. В этом случае существует некоторая круговая контрольная ошибка. Я бы хотел обнаружить текущую задачу рейка, чтобы пропустить инициализацию жемчужины, но я не знаю, как узнать, был ли код вызван с помощью функции rake. Как это проверить?

+0

«один из камней, поддерживающих кеширование ActiveModel» - какой? –

ответ

1

Если запустить задачу с помощью rake task или bundle exec rake task вы можете проверить его в инициализаторе просто:

if $0.end_with?('rake') 
    # rake stuff 
else 
    # non-rake stuff 
end 

Вы можете использовать $PROGRAM_NAME вместо $0, если вам нравится.

11

Я не получаю именно то, что вы пытаетесь сделать, но вот пример получения имени задачи.

task :testing do |task_name| 
    puts task_name 
    end 
+0

Если у вас есть задачи с именами, это должно работать 'puts task_name.name.split (':'). Last' (в rake v10.4.2). – spyle

8

Этот вопрос был задан несколько мест, и я не думаю, что любой из ответов были очень хорошими ... я думаю, что ответ должен проверить Rake.application.top_level_tasks, который представляет собой список задач, которые будут выполняться , Рейк не обязательно работает только один задача.

+0

Да, вопрос, заданный о получении имени и выбранного ответа, показывает, как определить, есть ли у вас проблема с рейком. Это правильный ответ. – method

+0

Я думаю, что это более элегантно, чем добавление 'do | task name |'. –

Смежные вопросы