Комментарии 19
Еще рельсы очень быстро запускаются. Что хорошо для TDD, индивидуальный тест быстро стартует, даже если прогружает почти все рельсы (не integrational тест, что то из model/controller/view).
Еще рельсы очень быстро запускаются.
Шутите? 15-20 секунд — это очень быстро?
Чтобы хоть как-то снизить время ожидания, придумана куча воркэраундов типа Zeus, Spork, Spring.
Пожилое rails 4 приложение на ruby 2.2.5 (71 гем в Gemfile).
Для сравнения, play framework прогоняет пустой тест в голом (!) аппе за 10 секунд.
Причиной такой долгой загрузки рельсов (15-20 сек) может быть большое кол-во мелких гемов.
Прелоадеры терпеть не могу из-за глюков.
Причиной такой долгой загрузки рельсов (15-20 сек) может быть большое кол-во мелких гемов.
Или просто размер приложения :-)
Впрочем, на мой взгляд, даже 3-4 секунды — это не очень быстро, хотя это уже приемлемо.
А "очень быстро" — это про миллисекунды.
(resources :pages 'page-id pages-controller)
А почему не сделать resources макросом и до конца уж эмулировать роутинг в стиле Rails? Это ж Lisp, тут милое дело DSL создавать.
(def routes
(build-routes
(resources :pages)))
Кстати, есть поддержка неймспейсов и вложенных ресурсов? Что-то типа:
(def routes
(build-routes
(namespace :admin
(resources :pages
(resources :comments)))))
А почему не сделать resources макросом
Макросы — это "темная магия" и без надобности ее применять не стоит. В данном случае все можно сделать через функции.
Кстати, есть поддержка неймспейсов и вложенных ресурсов? Что-то типа:
Конечно, в статье это упоминается, вот пример:
(resources :pages 'page-id {:index identity
:new identity
:create identity
:show identity
:edit identity
:update identity
:destroy identity}
:collection
[(action :archived identity)]
:member
[(resources :comments 'comment-id {:index identity})])
По-моему тут как раз надобность есть, я вон даже не заметил вложенный ресурс в коде, потому что он визуально перегружен. Например, какой смысл identity 9 раз писать?
Действительно, зачем тут identity 9 раз написано?
{:index identity
:new identity
:create identity
:show identity
:edit identity
:update identity
:destroy identity}
это inline контроллер, а identity — обработчик-заглушка.
Это второй пример использования и я показываю другой вариант, в первом примере используется отдельный контроллер.
Ладно, я Вас понял. Вы считаете, что предлагаемый Вами синтаксис роутов удобно читать… Непонятно только зачем было сравнивать его с Rails, ведь сравнение не в вашу пользу :-)
Ну, обработчик-загрушка и что? Что мешает написать примерно так:
(resources :pages 'page-id identity :only '(:index, :new, :create, :show, :edit, :update, :destroy))
Впрочем ладно, что-то я разошёлся… Через годик освоитесь с макросами, перестанете считать их "тёмной магией" и всё будет чудесно.
Я делаю проект-пример по работе с этой библиотекой, как раз покажу как с ресурсами работать.
Да, я видел эти библиотеки, спасибо.
Рендеринг через nashorn?
Это работает только если вы все компоненты на rum делаете, а если нужно какой-то внешний реакт-компонент, то это не сработает. Нужен какой-то js движок: nodejs или nashorn
https://github.com/darkleaf/quester/blob/master/src/cljc/quester/routes/web.cljc
так же вышла вторая переработанная версия библиотеки, с хорошими примерами
Организация роутинга в clojure веб-приложении