Хочу поделится с вами своим подходом к разработке модулей, тем и других частей Orchard CMS. В качестве контроля вермий я использую SVN, но думаю эту-же идею можно использовать с любым другим контролем версий. Все файлы лежат в отдельной папке репозитория, а в CMS они попадают с помощью символьных ссылок. Вспомогательные скрипты позволяют пересоздать базу и переустановить сайт с помощью одной команды, но обо всем по порядку:
Репозиторий модулей с NTFS символические линки.
Я использую файловую систему NTFS, так как в Windows только она позволяет создавать символические линки на файлы и папки. Мой репозиторий имеет следующую структуру:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 | \branches \tags \trunk \Files dev.recipe.xml [name].recipe.xml help.txt \Modules \[ModuleName] \Themes \[ThemeName] config-[name].bat mklinks-files.bat mklinks-modules.bat mklinks-themes.bat setup.bat |
Таким образом, все проекты и файлы рассортированы по своим местам. Возможно, имеет смысл вынести вспомогательные «.bat» файлы в отдельную папку, но это уже дело вкуса.
Файлы установки
Файлы mklinks-*.bat и setup.bat имеют схожую структуру, и делают одно действие над содержимым или самим Orchard.
mklinks-files- создаем ссылки на файлы
В моем случае создает только одну символическую ссылку на рецепт, который я успользую при установке.
1 2 3 4 5 6 7 8 | @echo off if %web_root%=="" exit set svn_files=%svn_root%\Files echo Files SVN=%svn_files% set recipe_name=dev.recipe.xml mklink %web_root%\Modules\Orchard.Setup\Recipes\%recipe_name% %svn_files%\%recipe_name% |
mklinks-modules — создаем ссылки на модули
Устанавливает модули. Для добавления еще одного модуля, достаточно скопировать 2 строки и сменить название.
01 02 03 04 05 06 07 08 09 10 11 12 | :: @echo off if %web_root%=="" exit set src_modules=%web_root%\Modules set svn_modules=%svn_root%\Modules echo Modules Source=%src_modules% echo Modules SVN=%svn_modules% set module_name=[module-name] mklink /d %src_modules%\%module_name% %svn_modules%\%module_name% |
mklinks-themes — создаем ссылки на шаблоны
Похож на mklinks-modules, только ставит линки на шаблон.
01 02 03 04 05 06 07 08 09 10 11 12 | :: @echo off if %web_root%=="" exit set src_themes=%web_root%\Themes set svn_themes=%svn_root%\Themes echo Templates Source=%src_themes% echo Templates SVN=%svn_themes% set theme_name=[theme-name] mklink /d %src_themes%\%theme_name% %svn_themes%\%theme_name% |
setup — переустанавливаем Orchard
Пересоздает базу данных и запускает orchard setup
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 | :: if %web_root%=="" exit set asqlcmd="c:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.exe" iisreset cd %web_root%\bin set app_data=%web_root%\App_Data del /q %app_data%\*.* rd /q /s %app_data%\Dependencies rd /q /s %app_data%\Logs rd /q /s %app_data%\RecipeQueue rd /q /s %app_data%\Sites %asqlcmd% -Q"drop database orchard" %asqlcmd% -Q"create database orchard" %asqlcmd% -Q"use orchard; CREATE USER [user] FOR LOGIN [user]" %asqlcmd% -Q"use orchard; EXEC sp_addrolemember N'db_owner', N'user'" ::orchard setup /SiteName:test /AdminUsername:admin /AdminPassword:adminPassword /DatabaseProvider:SQLServer /DatabaseConnectionString:"Data Source=localhost;Initial Catalog=orchard;Persist Security Info=True;User ID=user;Password=password" orchard setup /SiteName:test /AdminUsername:admin /AdminPassword:adminPassword /DatabaseProvider:SQLServer /DatabaseConnectionString:"Data Source=localhost;Initial Catalog=orchard;Persist Security Info=True;User ID=user;Password=password" /Recipe:Development pause |
Ход действий такой:
- Удалить содержимое папки App_Data
- Удалить базу orchard
- Создать базу orchard и дать доступ соответствующему пользователю
- Запустить команду setup с соответствующим рецептом (рецепт будет описан ниже).
config-[name].bat — вызов всего что перечислено выше
Этот файл должен запускатся для установки.
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 | :: set current_path=%~dp0 set web_root=C:\Orchard14\src\Orchard.Web set svn_root=C:\svn\orchard-modules\trunk cd %current_path% call mklinks-modules.bat cd %current_path% call mklinks-themes.bat cd %current_path% call mklinks-files.bat echo Proceed with setup? pause cd %current_path% call setup.bat |
Ход действий такой:
- Установить переменные, которые будут использовать скрипты.
- Последовательно запустить все скрипты.
- Перед запуском setup.bat убедится, что его действительно надо запускать (Ctrl-Break — для выхода).
Вспомогательные рецепты
Вот рецепт, который облегчает мою жизнь ускоряя процесс переустановки:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | < Orchard > < Recipe > < Name >Development</ Name > < Description >Base development.</ Description > < Author >admin</ Author > < Tags >dev</ Tags > < Version >1.0</ Version > </ Recipe > < Feature enable="Orchard.Blogs,Orchard.Comments,Orchard.Tags,Orchard.Alias,Orchard.Autoroute, TinyMce,Orchard.Media,Orchard.MediaPicker,Orchard.PublishLater, Orchard.jQuery,Orchard.Widgets,Orchard.Widgets.PageLayerHinting,Orchard.ContentTypes, Orchard.Scripting,Orchard.Scripting.Lightweight, PackagingServices,Orchard.Packaging,Orchard.Warmup,Orchard.Projections,Orchard.Fields,TheThemeMachine, Orchard.ImportExport,Orchard.Experimental,Orchard.CodeGeneration,Szmyd.CodeGeneration, Orchard.Experimental.WebCommandLine,Orchard.DesignerTools,Orchard.Migrations,DatabaseUpdate" /> < Metadata > < Types > < Page ContentTypeSettings.Draftable = "True" TypeIndexing.Included = "true" > < TagsPart /> < LocalizationPart /> < TitlePart /> < AutoroutePart /> </ Page > </ Types > < Parts > < BodyPart BodyPartSettings.FlavorDefault = "html" /> </ Parts > </ Metadata > < Command > layer create Default /LayerRule:"true" /Description:"The widgets in this layer are displayed on all pages" layer create Authenticated /LayerRule:"authenticated" /Description:"The widgets in this layer are displayed when the user is authenticated" layer create Anonymous /LayerRule:"not authenticated" /Description:"The widgets in this layer are displayed when the user is anonymous" layer create Disabled /LayerRule:"false" /Description:"The widgets in this layer are never displayed" layer create TheHomepage /LayerRule:"url '~/'" /Description:"The widgets in this layer are displayed on the home page" widget create HtmlWidget /Title:"First Leader Aside" /Zone:"TripelFirst" /Position:"5" /Layer:"TheHomepage" /Identity:"SetupHtmlWidget1" /UseLoremIpsumText:true widget create HtmlWidget /Title:"Second Leader Aside" /Zone:"TripelSecond" /Position:"5" /Layer:"TheHomepage" /Identity:"SetupHtmlWidget2" /UseLoremIpsumText:true widget create HtmlWidget /Title:"Third Leader Aside" /Zone:"TripelThird" /Position:"5" /Layer:"TheHomepage" /Identity:"SetupHtmlWidget3" /UseLoremIpsumText:true site setting set baseurl page create /Slug:"welcome-to-orchard" /Title:"Welcome to Orchard!" /Path:"welcome-to-orchard" /Homepage:true /Publish:true /Text:"Welcome To Orchard!" menuitem create /MenuPosition:"1" /MenuText:"Home" /Url:"" /OnMainMenu:true theme activate "The Theme Machine" </ Command > </ Orchard > |
Помимо стандартных модулей, я использую Szmyd.CodeGeneration, его нужно установить предварительно.
Создание пакетов и установка на Production окружение
Для запуска комманды package create нет никаких препятствий, так что можно создать пакет, а после этого установить его на удаленном Orchard CMS.
Дополнительные идеи
В принципе, тот же подход с символическими ссылками можно использовать вместе с модулем Multi Tenant. Для предоставления доступа к пользовательскому шаблону, положив его в папку пользователя.
Метки:ASP.NET, C#, Orchard CMS
Похожие статьи
- 15 сентября 2011 -- Еще раз о работе со службами (Windows Service) на C# (0)
- 22 августа 2008 -- Собственная страница для обработки ошибок на ASP.NET (0)
- 4 августа 2008 -- ASP.NET trace как один из инструментов отладки. (0)
- 25 июня 2011 -- Компиляция Mono 2.10.2 с исходного кода (3)
- 4 февраля 2009 -- LINQ Insert or Update еще одно решение. (2)
18 октября, 2012 at 11:39
Класно!
Осваиваю orchard — всё очень интересно, спасибо 🙂