2015-04-15 4 views

ответ

1

Если вы используете Builder (с использованием, запуском и т. Д.), То он не выглядит так, что вы можете легко вводить или удалять промежуточное ПО во время выполнения. Вот код: https://github.com/rack/rack/blob/master/lib/rack/builder.rb

Обратите внимание, что он создает стек промежуточного программного обеспечения, а при вызове run он создает экземпляр стека (называемый «@use») в дереве объектов промежуточного слоя, каждый из которых имеет ссылку на следующий - см. методы «use» и «to_app».

Итак: не думайте, что Builder предназначен для динамического добавления и вычитания промежуточного программного обеспечения в стеке.

Вы можете перестроить новый динамический стек или использовать несколько приложений Rack с и без тестирования промежуточного программного обеспечения или выполнить некоторые обратные действия, например Rails, для динамической перенастройки стека.

Вы также можете добавить тестовое промежуточное программное обеспечение только в тестовом режиме, или тот, который можно легко деактивировать, чтобы он стал промежуточным промежуточным программным обеспечением. Затем ваш spec_helper просто установил и очистил переменную, сообщающую ей пройти.

+1

ОК, спасибо. Я думал, так как вы можете сделать это в Rails, возможно, это можно будет сделать в Rack. В настоящее время я использую отдельную сборку Rack для тестов, но это создает дублирование. Я думаю, что это лучше, чем загрязнение сборки сборки тестовым кодом. –

+1

Раздельный строитель стойки для испытаний, вероятно, столь же чист, как и вы, здесь. –

+1

Rails хранит другой стек не-Builder. Если вам нужно это для других вещей, отлично. Но если вам нужно было создать/скопировать это только для этой проблемы, это будет слишком много кода и сложности для результата. –

0

Поскольку я хочу препендом в стек промежуточного программного обеспечения, решения для данного конкретного случая использования было легко.

Учитывая приложение, как определено выше под названием "приложение", добавьте новое промежуточное программное обеспечение: use ...

def new_app 
    Rack::Builder.new do 
    use ... 
    use ... 

    run app 
    end.to_app 
end 

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

  • Нет связанных вопросов^_^