Куда вы помещаете свои файлы промежуточного программного обеспечения Rack и какие требования?

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

В настоящее время я остановился на приложении / промежуточном ПО , но я мог бы с таким же успехом перенести его на поставщика / промежуточное ПО или, возможно, поставщика / плагины / промежуточное ПО . ..

Самая большая проблема заключается в необходимости требовать отдельные файлы в верхней части config / environment.rb

require "app/middleware/system_message"
require "app/middleware/rack_backstage"

, иначе я получаю неинициализированные постоянные ошибки в config.middleware.use линий. Это могло очень быстро испортиться. Я бы предпочел, чтобы это было где-то спрятано в инициализаторе.

Есть ли обычное место для размещения этого материала?


Конкретный ответ, который я ищу с этой наградой, таков: где я могу разместить требуемые строки, чтобы они не загромождали файл environment.rb но все равно загружается до вызова config.middleware.use? Все, что я пробовал, приводит к неинициализированным постоянным ошибкам.


Обновление : теперь, когда мы используем Rails 3.0, я отношусь к приложению Rails как к любому другому приложению Rack; файлы кода для промежуточного программного обеспечения находятся в lib (или в геме, указанном в Gemfile ), они требуются и загружаются в config.ru .

42
задан Adam Lassek 8 April 2011 в 22:37
поделиться

5 ответов

Я не знаю о конвенции, но почему бы не поместить его в каталог /lib? Файлы в нем автоматически загружаются Rails.

0
ответ дан 26 November 2019 в 23:39
поделиться

Вы можете создать инициализатор, который требует необходимых файлов, а затем оставить файлы там, где вы хотите.

Согласно это инициализаторы выполняются до загрузки промежуточного программного обеспечения стойки.

0
ответ дан 26 November 2019 в 23:39
поделиться

Рабочее решение, которое у меня есть до сих пор, - это перемещение требуемого промежуточного ПО в config / middleware.rb и требование этого файла в environment.rb , что сводит его к единственному требованию, которое я можно смириться.

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

0
ответ дан 26 November 2019 в 23:39
поделиться

Вы можете поместить его в lib / tableized / file_name.rb . Пока класс, который вы пытаетесь загрузить, можно обнаружить по его имени файла, Rails автоматически загрузит необходимый файл. Так, например:

config.middleware.use "MyApp::TotallyAwesomeMiddleware"

Вы должны оставить:

lib/my_app/totally_awesome_middleware.rb

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

>> ChrisHeald::StdLib.to_s.tableize.singularize
=> "chris_heald/std_lib"

Итак, мой stdlib находится в lib / chris_heald / std_lib.rb и загружается автоматически, когда я ссылаюсь на него в коде.

23
ответ дан 26 November 2019 в 23:39
поделиться

Для Rails 3:

#config/application.rb
require 'lib/rack/my_adapter.rb'
module MyApp
  class Application < Rails::Application
    config.middleware.use Rack::MyAdapter
  end
end
4
ответ дан 26 November 2019 в 23:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: