Хочу поделится с вами своим подходом к разработке модулей, тем и других частей Orchard CMS. В качестве контроля вермий я использую SVN, но думаю эту-же идею можно использовать с любым другим контролем версий. Все файлы лежат в отдельной папке репозитория, а в CMS они попадают с помощью символьных ссылок. Вспомогательные скрипты позволяют пересоздать базу и переустановить сайт с помощью одной команды, но обо всем по порядку:
Репозиторий модулей с NTFS символические линки.
Я использую файловую систему NTFS, так как в Windows только она позволяет создавать символические линки на файлы и папки. Мой репозиторий имеет следующую структуру:
\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- создаем ссылки на файлы
В моем случае создает только одну символическую ссылку на рецепт, который я успользую при установке.
@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 строки и сменить название.
:: @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, только ставит линки на шаблон.
:: @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
:: 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 — вызов всего что перечислено выше
Этот файл должен запускатся для установки.
:: 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 — для выхода).
Вспомогательные рецепты
Вот рецепт, который облегчает мою жизнь ускоряя процесс переустановки:
<Orchard> <Recipe> <Name>Development</Name> <Description>Base development.</Description> <Author>admin</Author> <WebSite>http://binaryanalysis.net</WebSite> <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 — всё очень интересно, спасибо 🙂