Укрепление глобальных экологических задач
В приложении я обновляюсь с Rails 3.2.22.4
в Rails 4.0.13
следующий блок кода для улучшения задачи глобальной среды стал дорожным блоком из-за отсутствия работы с целевой версией Rails:
Rails.application.class.rake_tasks do
Rake::Task["environment"].enhance do
...
end
end
Это прекрасно работает на 3.2
, но терпит неудачу с Don't know how to build task 'environment'
сообщение об ошибке в 4.0
,
В 3.2 Rails.application.class.rake_tasks
возвращает Proc object
([#<Proc:0x007f978602a470@.../lib/rails/application.rb:301>]
) указывая на эту строку в базе кодов рельсов. На 4.0 он возвращает пустой массив.
Линия, упомянутая выше Proc object
кажется, будет удален в этом коммите.
Какой предпочтительный способ усилить environment
грабли задача быть в Rails 4.x
?
Приведенный выше фрагмент кода находится в lib/subdomain/rake.rb
файл, и он включает в себя следующий код в lib/subdomain/engine.rb
:
module Subdomain
class Engine < Rails::Engine
...
rake_tasks do |_app|
require 'subdomain/rake'
end
...
end
end
Rake-задачи не могут быть выполнены, так как команда завершается с этой ошибкой. rails server|console
Команды работают нормально.
1 ответ
Опция 1
Если я правильно понимаю вопрос, что-то вроде этого должно работать, поместив эти задачи в стандартном месте, как lib/tasks/environment.rake
, Примечание. Ничто из этого не относится конкретно к Rails.
# Re-opening the task gives the ability to extend the task
task :environment do
puts "One way to prepend behavior on the :environment rake task..."
end
task custom: :environment do
puts "This is a custom task that depends on :environment..."
end
task :environment_extension do
puts "This is another way to prepend behavior on the :environment rake task..."
end
# You can "enhance" the rake task directly too
Rake::Task[:environment].enhance [:environment_extension]
Выход этого будет:
$ rake custom
This is another way to prepend behavior on the :environment rake task...
One way to prepend behavior on the :environment rake task...
This is a custom task that depends on :environment...
Вариант 2
Однако остается вопрос, почему :environment
нужно было продлить. Если это вызвать что-то раньше, скажем, db:migrate
вам может быть лучше просто заново открыть заданную задачу и добавить еще одну зависимость к этой конкретной задаче. Например:
task custom: :environment do
puts "This is a custom task that depends on :environment..."
end
task :custom_extension do
puts "This is a new dependency..."
end
# Re-opening the task in question allows you to added dependencies
task custom: :custom_extension
Результат этого:
$ rake custom
This is a new dependency on :custom
This is a custom task that depends on :environment...
CCC-Combo Breaker!!
Объединяя все, результат будет выглядеть так:
$ rake custom
This is another way to prepend behavior on the :environment rake task...
One way to prepend behavior on the :environment rake task...
This is a new dependency on :custom
This is a custom task that depends on :environment...