В настоящее время я переношу устаревшее приложение Rails 2.xx на Rails 3.2. Я делаю это, разбивая определенные части монолитного приложения на небольшие специализированные приложения. Моя проблема заключается в дублировании кода. Меньшие приложения будут использовать один и тот же код на стороне клиента для общего макета, javascript и css. Как мне упаковать макет и код на стороне клиента, чтобы их можно было совместно использовать между отдельными автономными приложениями? По моему первоначальному предположению, это можно сделать с помощью монтируемого движка. Но я не уверен, что это перебор.
Как поделиться макетом и активами между двумя отдельными приложениями rails?
Ответы (1)
Я написал блог http://blogs.pigrider.com/blogs/22, чтобы показать, как я шаг за шагом создайте общий механизм компоновки для использования в нескольких приложениях в Rails 3.2.
Краткий обзор моего блога:
В этом блоге показано, как я шаг за шагом создаю движок Rails для совместного использования макета несколькими приложениями. Способ, которым я создаю механизм общей компоновки в этом блоге, может быть не самым лучшим. Тем не менее, я только хочу дать некоторый ключ к тем, кто все еще борется за создание такого двигателя.
Имя моего движка "PigriderLayout". Запустите плагин команды rails new PigriderLayout --mountable -d mysql, чтобы создать новый проект движка. Здесь я использую -d mysql, потому что я использую MySQL в качестве базы данных. Вы можете изменить его, чтобы он соответствовал вашей собственной базе данных, и не забудьте добавить соответствующий гем базы данных в Gemfile. Я поместил драгоценный камень «mysql2», «0.3.11» в свой Gemfile.
Создайте контроллер для всего содержимого общего макета. Запустите эту команду. Rails сгенерирует основной контроллер globalLayout aboutUs contactUs. Здесь у меня есть три действия в этом главном контроллере. Затем отредактируйте файл config/routes.rb, пусть он выглядит так:
PigriderLayout::Engine.routes.draw do
match "AboutUs"=>"main#aboutUs", :as=>:aboutUs
match "ContactUs"=>"main#contactUs", :as= >:свяжитесь с нами
конецВ каталоге app/views/pigrider_layout/main вы должны увидеть три файла представления. Это globalLayout.html.erb, aboutUs.html.erb и contactUs.html.erb. Вы можете написать что угодно в aboutUs.html.erb и contactUs.html.erb. В файле globalLayout.html.erb я пишу:
......