Категорія: Railo
Установка Coldfusion и Railo на одном J2EE сервере на примере Glassfish
По следам наших наших прошлых публикаций, продолжаем серию рассказом про нестандартную установку Coldfusion в целях удобной разработки. Мотивация в том, чтобы иметь возможность разрабатывать код под Coldfusion и Railo на одной машине, но при этом не использовать слишком много ресурсов компьютера.
Читати далі...
Glassfish как application server для Сoldfusion
Достаточно много критики поступает в редакцию Adobe за использование во все стороны устаревшего сервера приложений JRun4. Вероятно в 10 версии Coldfusion будет использоваться другой сервер. Но необязательно ждать, уже сейчас можно облегчить себе жизнь. Например, поступить как описывает Пол Кукель (Paul Kukiel) в этом посте. Суть проста - установить сервер приложений Glassfish, и установить Coldfusion как WAR-приложение внутри "стеклорыбы". Кроме того, Railo тоже можно скачать как WAR-приложение и использовать вместе с Glassfish. Самое приятное, что настроив в Apache два виртуал-хоста, можно использовать Coldfusion и Railo вместе на одной машине - только различать их по имени хоста. При этом, связка GF+CF+Railo работает действительно быстро, субъективно, но я уверен, что точные тесты покажут ускорение объективно.
Шукаєте хостинг з Railo?
Тоді вам варто звернути увагу на сторінку Hosting Providers, що днями з'явилася на веб-сайті Railo.
Також варто зауважити, що завдяки скромним системним вимогам та простоті розгортання, є сенс звертати увагу і на VPS рішення. Наприклад, наш сайт розміщено на Linode.com. Це, без перебільшення, чудовий хостинг-провайдер з оригінальною та зручною системою розгортання вузлів (лінод) на базі Linux, професійною технічною підтримкою та цілком прийнятними цінами на послуги. До того ж, їх сайт написано на CFML.
P.S. Ні, цей матеріал не розміщено на правах реклами. Але ми будемо не проти, якщо хтось скористається нашим реферальним посиланням для реєстрації :)
Документація з Railo
З початком цього року спільнота Railo активізувала зусилля зі створення потужного інформаційного ресурсу, що містив би матеріяли як для новачків, так і для розв'язання більш складних завдань.
Таким ресурсом покликана стати Railo Wiki.
В ній можна знайти як документацію з CFML, так і зі специфічних для двигуна тем, зокрема описуються відмінності в підтримуваному синтаксисі.
Також вікі можна використовувати як стартову точку для пошуку інших матеріялів, бо вона містить посилання на сторонні ресурси, як то групи чи баґ-трекер.
З огляду на скромніші можливості з документування (фактично, зараз цим займається тільки Тодд Раферті, за що йому доземний уклін), ніж у тої ж Adobe, використовується змішана схема: деякі теми покриваються статтями вікі, деякі за допомогою посилань на зовнішні сайти (здебільшого блоги).
Наостанок варто зауважити, що вікі ще знаходиться в стані бети, що передбачає постійне покращення та розширення вмісту.
Незважаючи на це, там вже є чим поживитися цікавому розробникові.
Покращуючи CFScript
Шон Корфілд розповів про те, як відбувається еволюція CFScript. Він навів приклад того, як було втілено функції в різних серверах застосунків та роль CFML Advisory Commitee. Ми вже колись згадували про цю тему.
Що цікаво, я вже довгий час сповідую синтаксис, аналогічний до наведеного прикладу ColdBox: класичне визначення cffunction+cfargument, а тіло на cfscript.
Треба відмітити, що до широкого використання нового синтаксису ще далеченько, аж поки CF9 та Railo не займуть достатньо велику частину ринку. До того часу доведеться писати сумісний з CF8 код, щоб забезпечити собі спокійний тил.
Установка Railo на Windows с использованием Apache
Установка Railo Server очень проста, может, даже проста настолько, что нет смысла описывать ее. Еще проще было бы развернуть Express-версию (без инсталляции). Все же как небольшая памятка:
- скачать Railo Server;
- запустить инсталлятор и установить Railo в папку C:\Railo (с папкой Program Files могут быть трудности) - в результате получим Railo и сервер, работающий на порту 8600;
- как написано в этом посте, добавить в конфигурацию Apache такие строки, чтобы Railo обслуживал файлы CFM из апачного htdocs:
LoadModule caucho_module C:/Railo/win32/apache-2.2/mod_caucho.dll
<IfModule mod_caucho.c>
ResinConfigServer localhost 6800
CauchoConfigCacheDirectory C:/Railo/tmp
CauchoStatus yes
</IfModule>
UPDATE: как сказано в этом документе (PDF), нужно еще поднастроить Railo: в файле C:\Railo\conf\resin.conf изменить путь к корню (web-root):
<host id="" root-directory=".">
<web-app id="/" root-directory="C:/Program Files/Apache Software Foundation/Apache2.2/htdocs" />
...
После чего надо перегрузить Apache и have fun !
Серія постів Корфілда про встановлення Railo в Tomcat
В блозі Railo Шон Корфілд нагадав про те, що він ще кілька місяців тому написав серію матеріалів про встановлення Railo в Tomcat.
Добра нагода і для нас зберети ці посилання на майбутнє:
- Part I - Railo Express (з Jetty)
- Part II - Railo Express (з Jetty) - Windows
- Part III - Railo в Tomcat - базове встановлення
- Part IV - Railo в Tomcat з Apache
- Part IV - Appendix - Додаємо mod_rewrite до коктейлю
- Tomcat Tips - Дозвіл на перегляд директорій
- Multi-Web Configuration - Railo в Tomcat з автоматичним розгортанням Railo на нових веб-коренях
- Part V - Увімкнення SES URLs в Tomcat
Випущено Railo 3.1.2
Не пройшло і двох тижнів від випуску попередньої версії, а в Railo розродилися повноцінним релізом.
Незважаючи на порівняно незначну зміну номеру версії, вона містить в собі значну кількість покращень та виправлень. Про них і піде мова нижче. Примітка: це переклад офіційного тексту, тому тут слово "ми" відноситься до розробників Railo.
- Розширення серверу Railo власними мітками (тегами)
Дивіться цю публікацію в блозі:
CFC custom tag example - Загальна підтримка систем кешування
Скоро з'явиться публікація про це. - Згенеровані ключі для INSERT запитів
Скоро з'явиться публікація про це. - Колекція міток CFAJAX*
Написана Андреа Камполоньї з використанням міток на базі cfc (це розширення не є частиною ядра). Ми (CFUG) теж згадували про цей проект.
Дивіться цю публікацію в блозі:
Railo AJAX tags
Сторінка проекту:
Project Railo AJAX - Покращення безпеки
У випадку використання певних можливостей було можливо прочитати будь-який файл на розділі, де знаходиться веб-корінь (web root). Подяки Полу Клікенбергові та Піту Фрейтагу, що незалежно виявили цю проблему.
Всі паролі в railo-web.xml.cfm та railo-server.xml.cfm тепер закодовані.
Всі поля паролів в Railo Administrators тепер приховані за маскою.
Доступ до конфігурації Railo за допомогою мітки cfadmin тепер за умовчанням тільки для читання. - Нові версії серверів застосунків
В комплект встановлення Railo 3.1.2 ми включили останню стабільну версію Resin. Тепер він включає також win64 connector, так що ви можете легко встановити його з IIS6 or 7 на 64bit Windows.
Railo Express тепер поставляється в двох версіях. Одна містить типовий Jetty, а інший Resin 3.1.9. Встановлення залишається таким самим легким: просто розпакуйте архів та виконайте файл запуску, що відповідає платформі. - Зміни сторінки завантаження
Відразу після оновленого блоку скачування Railo Resin express ми додали список наявних патчів різних типів, з прямими посиланнями на завантаження. Вони можуть бути потрібні у випадку, коли ваш сервер знаходиться за файрволом чи проксі, що внеможливлює автоматичну процедуру. Завітайте на сторінку скачувань. - Оновлено образ Amazon AMI
Відразу після описаних вище змін ми також оновили образ для Amazon EC2, так що ви можете створювати вашу інсталяцію з неї. Образ включає встановлені застосунки:- Apache 2.2
- Tomcat 6.0.2
- Railo 3.1.2.001
- Mura 5.1.1102
- Mango Blog 1.4
- Оновлено вихідні файли
Ви можете знайти вихідні коди Railo 3.1.2.001 у звичному JBoss SVN репозиторії, або на сторінці завантажень.
Цей список англійською плюс формальний список змін з трекеру проекту можна переглянути в блозі Railo.
Як завжди, розповсюджувач можна скачати з сайту getRailo.org, оновитися ж з попередньої версії найкраще за допомогою вбудованої системи оновлення. Докладно про неї написано в Довідці з оновлення Railo 3.x.
Довідка з оновлення Railo 3.x
Це покрокове ЯкЦе з оновлення серверу Railo версій 3.x.
Англомовний аналог цього документу знаходиться на сайті getRailo.org: Updating Railo.
Підхід
Зайдіть до адміністратора серверу Railo, за умовчанням він знаходиться за адресою /railo-context/admin/server.cfm
Для доступу необхідно авторизуватися, пароль задається при першому запускові після встановлення.

Читати далі...
Що собою являє Railo Enterprise Bundle?
Цей текст є перекладом оригінальної публікації Шона Корфілда What is the Railo Enterprise Bundle?
Я отримав кілька запитань щодо Railo Enterprise Bundle, тому вирішив, що буде непогано написати відповідь для всіх до блогу.
Зазвичай питання ставляться у формі "що є в корпоративній версії, чого немає у безкоштовній?", але зважаючи на відомі типи комплектації та рівні цін від Adobe та New Atlanta, не є дивним сприйняття Railo Enterprise Bundle як трохи іншого типу "комплектації" серверу, котрий коштує грошей (та, відповідно, має більше можливостей).
Можливо, ми обрали трохи неточне ім'я для неї, але "пакунок" (bundle) якраз це й означає: набір речей, котрі ви можете придбати разом, але за зменшеною ціною. Отже, що входить до цього набору?
- FusionReactor Enterprise Server Monitor
- FusionDebug Interactive Step Debugger
- Всі поточні комерційні додатки Railo
На додаток, ви отримаєте рік Срібної (Silver) підтримки від Railo та рік супроводу (maintenance) від FusionReactor та FusionDebug. І ви економите гроші, ніж купуючи компоненти окремо.
Давайте розберемо набір докладніше...
Набір включає ліцензію на FusionReactor Enterprise з річним супроводом, що зазвичай коштує $799. Це звичайний продукт, що ви можете придбати у Intergral, розробників FusionReactor.
Набір також включає серверну ліцензію FusionDebug. Це трохи відрізняється від того, що ви можете придбати у Integral на сьогодні. Вони пропонують ліцензію для одного клієнта (за $399 з роком супроводу) та 5 клієнтських ліцензій (за $1495 з роком супроводу). В наборі ж Railo ви отримуєте серверну ліцензію FusionDebug, що не має обмежень на кількість клієнтів. Цінність цього залежить від кількості ваших розробників, котрі матимуть потребу виконувати сесії налагоджування (debug) на сервері, де буде встановлено набір :)
З огляду на те, що налагоджування відбувається на рівні JVM серверу, ви можете мати тільки одне активне з'єднання в даний момент, але кількість розробників, що можуть встановити FusionDebug та приєднатися до серверу, не обмежена.
Які ж є комерційні додатки до Railo:
- CFVIDEO - $100 / server
- Amazon S3 - $100 / server
- URL Spidering for CFSEARCH - $100 / server
- Cluster Scope - $200 / server
- Administrator Synchronization - $200 / server
- Caching (memcached, ehCache, distributed caching etc) - $200 / server
Ціна всих додатків складає $900, також ви отримуєте кожне оновлення та виправлення для додатків протягом року.
І на додаток до цього ви отримуєте місяць Silver Support для вашого серверу, що включає чотири години консультацій, та, як і в інших пакетах підтримки, гарантований договором про підтримку (SLA) час відповіді на проблеми, а також знижку на будь-які додаткові консультації, що можуть вам знадобитися. Silver Support зазвичай коштує $999 за сервер.
Повертаючись до найпершого питання, єдиною чисто корпоративною "можливістю" в наборі Railo є прив'язка до серверної ліцензії для FusionDebug, так що ви можете мати необмежене чисто клієнтів для налагоджування на сервері (зазвичай FusionDebug ліцензується якраз за кількістю клієнтів). В решті, Railo сервер є тим самим Railo сервером -- з тою самою підтримкою CFML та функціональністю, тою самою швидкодією, тими самими інноваційними можливостями, що ви знайдете у вільній відкритій версії.
З Railo Enterprise Bundle йдеться про вигідний за ціною шлях отримання найкращих в галузі засобів для моніторингу та налагоджування, додатків для складних, великих веб сайтів, та про рік підтримки та супроводу з можливістю додаткового консультування зі знижкою.
Очікуйте більше публікацій наступними тижнями від команди Railo щодо FusionReactor Server Monitor та FusionDebug CFML Debugger, а також докладніший розгляд можливостей комерційних додатків.
Переклад українською: Сергій Галашин.
Нове розширення Railo: Ram Resource
Railo продовжує перегони з CF9 в плані функціональності, та робить це якісно і ефективно.
Цього разу вони порадували першою інформацією про VFS (віртуальна файлова система). Вона надає базові можливості створення директорій, запису та читання файлів. Також доступна можливість переглянути існуючі ресурси в адмінці контексту.
Треба зауважити цікаву перевагу реалізації VFS, що обмежені тільки поточним контекстом, що корисно задля безпеки. В CF9 є певні проблеми з цим, пов'язані зі спільним доступом до пам'яті, так що навіть рекомендуєтсья вимикати це розширення на shared хостингах.
Тодд Рафферті опублікував докладне ЯкЦе в офіційному блозі Railo, що докладно пояснює як встановити та користуватися цим новим розширенням.
Railo 3.1.1.017 Preview
Наближається час релізу Railo 3.1.2, тим часом розробники виклали попередню (preview) збірку. Вона, фактично, представляє собою майже повний набір оновлень та виправлень, що нас очікують в новій версії.
Найбільші оновлення наступні.
- Railo Cache (поки експериментальна підтримка), справді потужної можливості, котра дозволятиме дуже зручно та ефективно кешувати будь-які об'єкти як за допомогою власного двигуна RamCache, так і за допомогою відомої системи EHCache, надалі планується підтримка інших існуючих систем кешування.
- Деякі зміни в політиці безпеки в сторону посилення безпеки доступу до налаштувань серверу.
- Згенеровані ключі (нарешті!) для доданих в базу рядків.
- CFDUMP як HTML, теґ переписано як CFC.
- Новий атрибут terminateOnTimeout в CFEXECUTE.
Про ці та велику кількість дрібніших оновлень написано в блозі Railo.
Новини CF-OpenSource v6
Нові продукти та оновлення
Система для програмного керування налаштуваннями CF сервера, такими як датасорси, мапінги, шляхи до кастом теґів. Підтримуються Adobe ColdFusion 7/8/9 Railo 3.1, OpenBD 1.1
cfUpdater - Manager for ColdFusion Updates
Компонента для спрощення процесу оновлення Adobe ColdFusion версій 7/8/9
Конвертація Google Trends RSS в CFML масив.
Рання альфа компоненти для взаємодії CF з Trac (популярною системою баґтрекінгу з wiki).
Клієнт на Python + CFML скрипти, що дозволяють інтерактивно виконувати CFML код в консолі. Дещо сумнівна щодо практичної користі, але цікава розробка.
Утиліта для міграції блогу з Wordpress на BlogCFC.
Проста в користуванні (як запевняють розробники) реалізація Factory (автоматизоване створення об'єктів) для CFML.
Інтеграція Yahoo Maps в CF додатки, написана одним з членів команди Adobe ColdFusion.
Можливість записувати debug output до файлів - якщо він потрібен, але показувати його небажано, фактично розширення наявної (і доволі кострубатої) системи журналювання.
Невеличкий фреймворк для пришвидшення розробки додатків з ORM.
Реалізація додатку для перевірки правопису в textarea на CFML.
Різні новини зі світу OSS
ColdFusion on Rails is almost here
Кріс Пітерс повідомив про те, що реліз 1.0 CF on Wheels вже близько.
Створено Гугл-групу для Ant4CF.
ColdBox 3.0.0 Beta 2 Released!
Популярний фреймворк наближається до релізу. Що нового третій версіі можна дізнатися з wiki проекту.
Убезпечення контексту Railo з IIS та Apache
Джеймс Аллен (James Allen) наводить поради як закрити Railo Administrator від небажаного доступу, пропонуючи зробити це засобами IIS.
Натомість Піт Фрейтаґ (Pete Freitag) рекомендує закрити увесь railo-context засобами Apache. Треба зауважити, що це актуально у тому випадку, якщо не використовуються cfform, cfchart та інші речі, котрі потребують вільного доступу до контексту.
Підхід до розгортання сайту на базі Fusebox 5
В нетрях обговорення груп Railo виявив пару повідомлень, інформацію з котрих варто зберегти на майбутнє. В них наводиться спосіб оновлень живого сайту на базі Fusebox 5.
Основною проблемою, що треба вирішити, це генерація parsed файлів при одночасному доступі кількох (багатьох) користувачів. Це є відомим недоліком FB, котрий поки що не було остаточно виправлено. Суть його в тому, що при конкурентному доступі FB може записати "криві" файли (наприклад, недописані, коли <cfif> не закривається), через які весь додаток перестає працювати, видаючи незрозумілі й кожного разу різні помилки CFML синтаксису.
Тут є дві речі, що варто пам'ятати.
1. Необхідно завжди вмикати production mode на живому сайті. Незважаючи на очевидність кроку, це вельми розповсюджена помилка. Бо в development режимах FB генерує ті чи інші файли, що значно підвищує вірогідність виникнення помилок. Не кажучи вже про те, що сповільнює роботу сайту.
2. Варто тримати три робочі копії проекту.
Перша -- повноцінна розробницька версія, з відповідним development режимом, типово локально у розробника.
Друга -- живий сайт, з production режимом та всіма відповідними налаштуваннями.
І нарешті третя копія, призначення тільки для розгортання (deployment). Вона розміщується окремо від основного сайту (на тому самому сервері) та призначена для безпечного генерування parsed файлів (для великих проектів може займати кілька хвилин), котрі потім гуртом копіюються прямо на живо. Цю операцію варто повторювати при кожному оновленні, принаймні коли змінюються файли, що знаходяться під контролем Fusebox'у.
У випадку зміни ланцюжків (circuits) може потребуватися запустити основний сайт з fusebox.load, щоб він їх "підхопив".
На щастя, цей процес цілком можна автоматизувати, наприклад за допомогою Ant.
Примітка для користувачів Railo: deployment та production копії варто тримати ізольованими в різних веб-контекстах, хоча саме ядро Fusebox може бути те саме, достатньо використати мапінги (mapping) для контекстів.
Запущено RailoAjax.org
Сьогодні сталася ще одна добра подія для спільноти.
Андреа Камполоньї (Andrea Campolonghi) повідомив у гугл-групі Railo про те, що вийшов на інтернет-орбіту RailoAjax.org. Як помітно з назви, проект призначено для втілення cfajaxproxy, cfdiv and та інших RIA-фішок.
За клієнтську взаємодію відповідає jQuery, за серверну, вочевидь, CFML.
Варто додати, що проєкт має вікі та трекер на базі Trac: docs.railoajax.org
Встановлення PHP 5, CF 8, CF 9 та Railo 3.1 з Apache 2 в Ubuntu - частина 3
Продовжуємо розповідь про налаштування середовища для CFML-розробника.
В першій частині ми дізналися як налаштувати Apache 2, PHP 5, Java та ColdFusion 8.
В другій частині ми детально встановлювали та налаштовували ColdFusion 9.
Нарешті, дійшла черга й до мого нового улюбленця: Railo.
Я покладаю великі надії на цей CFML-двигун та вже пробую використати його для нових проектів.
Як заведено, для початку нам знадобиться дистрибутив, а саме стандартна версія Railo Server без JRE для всих ОС.
Скачаний tar.gz треба розпакувати та перемістити в /opt/railo.
Наш Railo насправді вже готовий до роботи, в чому легко переконатися виконавши команду
/opt/railo/bin/httpd.sh start
За кільканадцять секунд можна буде відкрити http://localhost:8600/ (стандартний порт) та побачити вітальне демо:

Так само можна завітати до адміністратора веб-контексту за умовчанням:

Але наша задача дещо ширша, тому вимикаємо Railo-server та переходимо до конфігурування.
Варто зауважити, що в цьому випадку немає проблеми конфлікту з CF, тому домашньою текою для хосту буде взято ту ж саму, що й для CF8.
В ній зберігаються всі мої CFML-проекти та скрипти, тому це буде зручно та виправдано.
Спочатку нам потрібно зібрати модуль Apache.
cd /opt/railo
./configure --with-java-home=/usr/lib/jvm/java-6-sun/ --with-apxs=/usr/bin/apxs2
Зауважу, що ключ java-home не обов'язковий, якщо у вас потрібна версія Java встановлена за умовчанням.
Треба уважно переглянути виведення на предмет повідомлень про помилки, які обов'язково треба виправити до переходу на до наступних команд:
make
sudo make install
В результаті цього ми отримаємо встановлений модуль /usr/lib/apache2/modules/mod_caucho.so
Через це відмінне ім'я (caucho) решта налаштувань теж матимуть його для одноманітності.
У випадку, якщо Railo змінить httpd.conf, його знову-так треба буде почистити аби запобігти дублюванню директив.
Натоміть створити /etc/apache2/cauchoconnector з таким вмістом:
<IfModule mod_caucho.c>
ResinConfigServer localhost 6800
CauchoConfigCacheDirectory /tmp
CauchoStatus yes
</IfModule>
Ініціалізація модуля аналогічна попередникам:
/etc/apache2/mods-available/caucho.load
LoadModule caucho_module /usr/lib/apache2/modules/mod_caucho.so
a2enmode caucho
Створення віртуального хосту теж вже знайоме:
/etc/apache2/sites-available/localhost.railo
NameVirtualHost localhost.railo
<VirtualHost localhost.railo>
ServerAdmin SetYourEmail@ServerName.tld
ServerAlias localhost.railo
ServerName localhost.railo
DocumentRoot /home/trovich/www/cfm
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /home/trovich/www/cfm/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
allow from all
DirectoryIndex index.cfm index.html index.htm
</Directory>
ErrorLog /var/log/apache2/error.localhost.railo.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/apache2/access.localhost.railo.log combined
Include cauchoconnector
</VirtualHost>
a2ensite localhost.railo
sudo /etc/init.d/apache2 restart
Так само робимо скрипт запуску, текст якого трішки відрізняється:
#! /bin/sh
java=/usr/lib/jvm/java-6-sun/bin/java
script=`/bin/ls -l $0 | awk '{ print $NF; }'`
while test -h "$script"
do
script=`/bin/ls -l $script | awk '{ print $NF; }'`
done
exec $java -jar /opt/railo/lib/resin.jar $*
Зауважу, що за основу тексту цього скрипта було взято оригінальний /opt/railo/bin/httpd.sh
Нарешті, реєструємо віртуальний хост в конфігурації Resin /opt/railo/conf/resin.conf
<host id="localhost.railo" root-directory="/home/trovich/www/cfm">
<web-app id="/" root-directory="/home/trovich/www/cfm/"/>
</host>
Він має знаходитися відразу після кофігурації хосту за умовчанням (<host id="" root-directory=".">).
Також в цьому файлі варто закоментувати блок, що відповідає за логування подій. По-перше, це вже робить для нас Apache, по-друге, він писатиме логи в доступну з вебу теку, що потребуватиме додаткового захисту. Цей блок починається з теґу �access-log ...
Запускаємо Railo:
sudo /etc/init.d/caucho [start|stop]
Якщо все йде добре, маємо бачити вже інакший дамп того самого файлу server.cfm.
http://localhost.railo/server.cfm

Найприємнішим в цій ситуації є факт, що Railo та CF8 можуть працювати одночасно, що дуже допомагає в тестуванні сумісності між ними та портуванні коду.
Сподіваюся, що ця стаття стане у нагоді розробникам та допоможе звертати більше уваги новим технологіям.
Встановлення PHP 5, CF 8, CF 9 та Railo 3.1 з Apache 2 в Ubuntu - частина 1
Встановлення PHP 5, CF 8, CF 9 та Railo 3.1 з Apache 2 в Ubuntu - частина 3
Встановлення PHP 5, CF 8, CF 9 та Railo 3.1 з Apache 2 в Ubuntu - частина 2
В першій частині розповіді ми дізналися як налаштувати Apache 2, PHP 5, Java та ColdFusion 8.
Час переходити до наступного етапу -- встановлення ColdFusion 9 (Centaur).
Хочу зауважити, що налаштування підпорядковані наступному принципові: CF9 поки в беті, тому використовується для експериментів та навчання. Вона не має заважати роботі CF8, хоча й намагатиметься.
Ця частина містить кільканадцять знимків екрану для наглядності, тому доволі великий повний текст розміщено тільки на сторінці посту »
Читати далі...
Встановлення PHP 5, CF 8, CF 9 та Railo 3.1 з Apache 2 в Ubuntu - частина 1
Як правило, веб-розробники мають потребу в декількох типах середовищ, навіть різних версій одного й того ж додатку.
В цій статті я розповім про те, як я налаштовую свою систему, що в даний момент включає в себе PHP 5, ColdFusion 8, ColdFusion 9 та Railo 3.1. На даний момент моєю основною робочою системою є Xubuntu (9.04), тож інструкції відповідатимуть цій ОС. Відповідно, потрібні деякі мінімальні знання з цієї області, як то навички користування консолею.
Головною нашою задачею є ізоляція різних середовищ одне від одного в рамках єдиної інсталяції Apache 2.
Це перша частина, присвячена налаштуванню Apache 2, PHP 5, Java та ColdFusion 8.
Для початку нам треба визначитися з іменами віртуальних хостів, на яких будуть розташовані середовища. Останнім часом я зупинився на наступній системі йменування хостів, котру ілюструє запис в /etc/hosts
127.0.0.1 localhost localhost.php localhost.cf8 localhost.cf9 localhost.railo
Призначення кожного елементу цілком очевидне.
Першим кроком є встановлення Apache 2 та PHP 5. В Ubuntu це дуже просто, потрібно в консолі виконати команду, подібну до наступної:
sudo apt-get install apache2 apache2-threaded-dev libapache2-mod-php5 build-essential
Решту потрібних модулів встановлюється при потребі. Примітка: останній елемент знадобиться нам пізніше, він не є необхідним для даного етапу.
PHP встановлюється глобально для всього веб-серверу (.php скрипти оброблятимуться і в кожному віртуальному хості), мене це не турбує, тому залишаю як є. На даний момент мені просто треба зробити окремий хост для PHP розробки. Для цього треба створити файл конфігурації хосту:
/etc/apache2/sites-available/localhost.php
Я звик тримати всі робочі файли в домашній теці, тому шлях до файлів розробки є таким:
/home/trovich/www/php
Тоді конфігурація localhost.php буде наступною (це повний текст файлу).
NameVirtualHost localhost.php
<VirtualHost localhost.php>
ServerAdmin SetYourEmail@ServerName.tld
ServerAlias localhost.php
ServerName localhost.php
DocumentRoot /home/trovich/www/php
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /home/trovich/www/php/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
allow from all
DirectoryIndex index.php index.html index.htm
</Directory>
ErrorLog /var/log/apache2/error.localhost.php.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/apache2/access.localhost.php.log combined
</VirtualHost>
Тепер нам залишається змусити Apache підхопити цей хост та перевірити його. Для цього виконаємо в консолі:
sudo a2ensite localhost.php
sudo /etc/init.d/apache2 restart
Створивши файл /home/trovich/www/php/index.php зі вмістом <?php phpinfo(); ?> можемо протестувати http://localhost.php/
У випадку успіху маємо побачити щось подібне до цієї картинки:

У випадку, якщо з'являються повідомлення про помилку (типовим є статус 500), варто звернутися до журналу Apache, що відповідає даному хостові:
/var/log/apache2/error.localhost.php.log
Я полюбляю спостерігати за змінами використовуючи tail:
tail -f /var/log/apache2/error.localhost.php.log
tail -f /var/log/apache2/access.localhost.php.log
Другий журнал відповідає нормальній роботі хосту та містить повідомлення про всі запити.
Тепер переходимо до головної задачі -- встановлення ColdFusion 8. Головної тому, що вона наразі є моїм основним середовищем розробки, тому всі налаштування орієнтуватимуться саме на її потреби.
Для початку треба отримати дистрибутив ColdFusion, скачавши розробницьку linux-версію з офіційного сайту Adobe.
Після скачування треба надати файлові права на виконання, в моєму випадку це виглядає так:
chmod +x coldfusion-801-lin.bin
Треба відмітити, що Adobe зробили вельми зручний консольний інсталятор для 8-ки (і 9-ки, відповідно), тому негайно переходимо до процесу:
sudo ./coldfusion-801-lin.bin
Виконання з правами рута (root) необхідне через потребу запису файлів в системні директорії.
З огляду на те, що на момент проведення даного експерименту в мене вже була готова інсталяція ColdFusion 8, я не описуватиму її детально, це буде зроблено нижче для ColdFusion 9. На щастя, вони майже ідентичні.
Зауважу лише кілька важливих моментів.
1. Очевидно, що для роботи CF потрібна Java JRE, а для Railo ще й JDK. Встановлення їх теж дуже просте:
sudo apt-get install java6-runtime java6-sdk
2. Зазвичай я встановлюю CF до /opt/coldfusion8.
Шлях для домашньої теки CF у мене історично є /home/trovich/www/cfm, без вказання версії. Там CF8 й розміщує теку CFIDE. Це важливо, бо CF9 матиме іншу домашню теку з власною CFIDE.
3. Встановлення CF та налаштування хостів мають йти поетапно, бо вони обидві переписують стандартний файл конфігурації Apache:
/etc/apache2/httpd.conf
Він нам буде ще потрібен, тому перейдемо до налаштувань віртуального хосту.
По-перше, нам необхідно ізолювати модуль CF8, для цього створимо йому окремий файл конфігурації.
/etc/apache2/mods-available/cf8.load
В цей файл переносимо текст завантаження модуля:
LoadModule jrun_module /opt/coldfusion8/runtime/lib/wsconfig/1/mod_jrun22.so
Далі створюємо файл /etc/apache2/cf8connector (назва може бути інша, головне щоб лежав в теці Apache2) та переносимо в нього решту конфігурації модуля:
<IfModule mod_jrun22.c>
JRunConfig Verbose false
JRunConfig Apialloc false
JRunConfig Ignoresuffixmap false
JRunConfig Serverstore /opt/coldfusion8/runtime/lib/wsconfig/1/jrunserver.store
JRunConfig Bootstrap 127.0.0.1:51800
#JRunConfig Errorurl url <optionally redirect to this URL on errors>
#JRunConfig ProxyRetryInterval 600 <number of seconds to wait before trying to reconnect to unreachable clustered server>
#JRunConfig ConnectTimeout 15 <number of seconds to wait on a socket connect to a jrun server>
#JRunConfig RecvTimeout 300 <number of seconds to wait on a socket receive to a jrun server>
#JRunConfig SendTimeout 15 <number of seconds to wait on a socket send to a jrun server>
AddHandler jrun-handler .jsp .jws .cfm .cfml .cfc .cfr .cfswf
</IfModule>
Увага: видаляти httpd.conf не можна, він просто має залишитися порожнім.
Підкажемо Apache, що у нас є новий модуль для нього:
sudo a2enmode cf8
Налаштуємо власне віртуальний хост. Для цього створимо файл конфігурації
/etc/apache2/sites-available/localhost.cf8
Вміст його майже ідентичний тому, що вже було показано для PHP:
NameVirtualHost localhost.cf8
<VirtualHost localhost.cf8>
ServerAdmin SetYourEmail@ServerName.tld
ServerName localhost.cf8
DocumentRoot /home/trovich/www/cfm
<Directory /home/trovich/www/cfm/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
allow from all
DirectoryIndex index.cfm
</Directory>
ErrorLog /var/log/apache2/error.localhost.cf8.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/apache2/access.localhost.cf8.log combined
Include cf8connector
</VirtualHost>
Дуже важливою особливістю є виділена жирним директива. Вона підключає наш файл конфігурації модулю саме для цього віртуального хосту.
Нарешті, завершимо операцію командами:
sudo a2ensite localhost.cf8
sudo /etc/init.d/apache2 restart
Перед тим, як перевіряти результати, варто запустити ще й CF. Зазвичай це робиться наступною командою:
sudo /opt/coldfusion8 start (stop для зупинки)
Для зручности я створюю Shell-скрипт для цього діла, що має наступний вміст:
#! /bin/sh
coldfusion=/opt/coldfusion8/bin/coldfusion
script=`/bin/ls -l $0 | awk '{ print $NF; }'`
while test -h "$script"
do
script=`/bin/ls -l $script | awk '{ print $NF; }'`
done
exec $coldfusion $*
Таким чином процедура запуску/зупинки зводиться до канонічного
sudo /etc/init.d/cf8 [start|stop]
Отже, сервер запущено, можна перевірити його дієздатність: http://localhost.cf8/server.cfm з текстом <cfdump var="#server#">. Маємо бачити щось схоже на це:

У випадку помилок так само звертаємося до журналів Apache, як було описано вище.
Встановлення PHP 5, CF 8, CF 9 та Railo 3.1 з Apache 2 в Ubuntu - частина 2
Встановлення PHP 5, CF 8, CF 9 та Railo 3.1 з Apache 2 в Ubuntu - частина 3
Railo Tips: типи аргументів, відносні шляхи та згенеровані ключі
Працюючи над портуванням проекту під Railo стикаюся з різними особливостями роботи двигуна, котрі варто пам'ятати щоб не наступати на ці граблі надалі.
Спершу виникла проблема з nullable атрибутами в Transfer ORM. В моєму випадку NULL для поля з типом DATE зручно було використовувати для дати завершення строку дії рахунку. Для цього дефініція виглядала наступним чином:
<property name="expirationDate" type="date" column="exp_date" nullable="true" />
Тоді методи object.setExpirationDateNull() / object.getExpirationDateIsNull() давали потрібний результат.
Transfer зберігає NULL-дати в своєму особливому форматі (фактично, дата в далекому минулому), але при витягання NULL з бази все одно ColdFusion конвертував його в порожій рядок. Цей факт і став фатальним при передачі витягнутого значення сеттерові setExpirationDate(<date>).
Railo, на відміну від CF8, не бажає сприймати порожній рядок як коректну дату при передачі його аргументом функції.
Внаслідок цього довелося відмовитися від nullable атрибутів та трішки переробити спосіб відслідковування дат завершення строку.
UPDATE
Насправді, це виявилося проблемою коду, що взаємодіяв з Transfer. Бо несприйняття порожнього рядку є нормальним явищем для будь-якого CFML парсера.
Іншою проблемою стало використання наступного методу ініціалізації об'єкта:
variables.logBean = CreateObject("component", "model/LogBean").init( arguments.pageid, arguments.userid );
Такий відносний шлях не спрацював в Railo.
На щастя, динамічні мапінги в ньому працюють, тому я використав вже існуючий і переробив код наступним чином:
variables.logBean = CreateObject("component", "components.core.model.LogBean").init( arguments.pageid, arguments.userid );
Наостанок мене трохи розчарував той факт, що Railo не дістає останній доданий ключ в result запиту, зокрема для MySQL там не встановлюється GENERATED_KEY взагалі (додано 30.11.2009 -- виправлено!). В якості тимчасового рішення використав наступний спосіб:
<cflock name="#this.lockName#" type="exclusive" timeout="5">
<!--- push bean into the db ---->
<cfquery datasource="#variables.dsn#" name="qAddLogEvent" result="qResult">
INSERT INTO #variables.tableLogCurrent#
(id_page, id_user, log_type, log_message, log_detail, remote_ip, moment)
VALUES
(
<cfqueryparam cfsqltype="cf_sql_integer" value="#logBean.getPageId()#" />,
<cfqueryparam cfsqltype="cf_sql_integer" value="#logBean.getUserId()#" />,
<cfqueryparam cfsqltype="cf_sql_char" value="#logBean.getLogType()#" />,
<cfqueryparam cfsqltype="cf_sql_char" value="#logBean.getLogMessage()#" />,
<cfqueryparam cfsqltype="cf_sql_char" value="#logBean.getLogDetail()#" />,
<cfqueryparam cfsqltype="cf_sql_char" value="#logBean.getRemoteIp()#" />,
<cfqueryparam cfsqltype="cf_sql_timestamp" value="#logBean.getMoment()#" />
)
</cfquery>
<!--- this is a workaround for the engines not supporting GENERATED_KEY --->
<cfif NOT StructKeyExists(qResult, "GENERATED_KEY")>
<cfquery datasource="#variables.dsn#" name="qResult">
SELECT LAST_INSERT_ID() AS GENERATED_KEY
</cfquery>
</cfif>
</cflock>
Хорошою ж новиною є те, що цей прикрий факт можна змінити. Для цього треба проголосувати у відповідному запитові Uservoice. Знаючи лояльність розробників я вірю, що потрібні зміни будуть доволі скоро.
Чому Railo кермує як платформа для Saas
Розробники з компанії Straker зробили свій внесок до популярної теми для обговорення в спільноті: Railo vs ColdFusion.
Вони стверджують, що в одному з аспектів Railo є безумовним лідером. Як платформа для Software as a Service рішень.
Переваги було згруповано за чотирма категоріями: масштабованість, безпека, ціна, оновлення.
В коментарях було слушно зауважено, що суттєвим мінусом є складність розгортання, особливо на тонко налаштованих системах. Також там відмітився Адам Леман, продукт менеджер ColdFusion, з альтернативними думками щодо кожного пункту.
Докладно про всі ці речі читаємо в Why Railo kicks butt for ColdFusion based SaaS.
Випущено Railo 3.1
Не так давно ми повідомляли про вихід бети, а ось вже й реліз готовий.
Серед оновлень найцікавішими є наступні
- Підтримка Fusion debug
- Підтримка BlazeDS (AMF3)
- Кастом теґи на базі CFC
- Розширення (extensions) та підтримка власних глобальних функцій
- Встановлення часових зон в контексті сторінки
- Тернарний оператор
- Кеш в кластері
Про ці та інші можна прочитати в офіційному повідомленні.
Щодо швидкодії створення об'єктів
Минулого місяця тривала (й триває досі) хвиля дискусій, що були породжені появою ORM в CF9. Якщо бути точним, реалізацією ORM за допомогою CFC-об'єктів.
Багато хто з розробників піддав сумніву доцільність цього кроку, небезпідставно стверджуючи про те, що створення об'єктів в CF є витратним та повільним процесом, бо потребує ряду операцій та витрат, наприклад сама компонента та кожен метод є окремим Java об'єктом, створення областей видимості та ін. Докладніше про це питання можна прочитати ув одного з інженерів Adobe в замітці ColdFusion ORM and CFC Performance.
Нас же зараз цікавлять приклади та порівняння. Цією справою не полінувалися зайнятися кілька ентузіастів:
- ColdFusion 9 Object Creation Performance
- ColdFusion 8, 9 and Railo Object creation speed test
- CFC Creation Time in ColdFusion 8/9, Open BlueDragon 1.1 and Railo 3.1
І показали вельми цікаві результати, зокрема здивувала значна перевага Railo. Зрозуміло, що це лише один з аспектів швидкодії, котрий сам по собі не може бути базою для висновків.
Зауважу також, що обговорення питання проходить в гілці Object creation performance in CF 9: any better?
Створення власної вбудованої функції в Railo
Що мені подобається в Railo, так це наявність зворотнього зв'язку його розробників зі спільнотою.
Вони постійно публікують інформацію про оновлення, надають приклади та обговорюють їх з CF-розробниками.
Цього разу розповіли про цікаву можливість: встановлення будь-якої UDF на рівні сервера, або віртуального хосту.
Відгуки користувачів для Railo
Відсьогодні кожен бажаючий може зробити внесок до планування та обговорення наступних оновлень Railo.
Для цього потрібно завітати до відповідного розділу uservoice, системи для накопичення користувацьких відгуків.
Добре починання для доброго ПЗ!
