Показаны сообщения с ярлыком apache. Показать все сообщения
Показаны сообщения с ярлыком apache. Показать все сообщения

среда, 17 июля 2013 г.

Apache Ivy. My experience.

I've been using Apache Ant for a long time. It is easy to use. But the most feature it lacks is a project dependency management. Moreover, I need not just resolve the open source projects, but to resolve my own projects.

In my development I have 2 projects that share common classes, which are in a third project. I also have a continues integration server. All projects are build on it and later deployed.

I found that Apache Ivy best suites my need. The reasons for this are:
  • it does integrate with Ant. 
  • it takes minimum intervention into the project to use Ivy. 
  • it has tutorials and good documentation. 

What I like is that in default configuration Ivy offers you a local repository. All you have to do is write an ivy.xml file, which describes your project and dependencies and modify build.xml.

In my situation I write the ivy.xml, that describes the shared project like this:
<ivy-module version="2.0">
    <info organisation="my" module="common"/>
    <publications>
      <artifact name="common" type="jar" />
    </publications>
</ivy-module>

And modified build.xml to publish project like this:
<!-- =================================
          target: publish-local
         ================================= -->
<target name="publish-local" depends="jar" description="--> publish this project in the local ivy repository">
        <tstamp>
            <format property="now" pattern="yyyyMMddHHmmss" />
        </tstamp>
        <ivy:publish artifactspattern="${dist.dir}/[artifact].[ext]" resolver="local" pubrevision="${version}" pubdate="${now}" forcedeliver="true" />
        <echo message="project ${ant.project.name} published locally with version ${version}" />
        <ivy:cleancache />
    </target>

In my other projects which depends on a "common.jar" I write the following ivy.xml:
<ivy-module version="2.0">
    <info organisation="my" module="booking"/>
    <dependencies>
        <dependency name="common" rev="latest.integration" />
    </dependencies>
</ivy-module>

And modified the build.xml like this:
<!-- =================================
          target: resolve             
         ================================= -->
    <target name="resolve" depends="clean, clean-cache">
        <ivy:retrieve />
    </target>

That is all.

One more thing. You can use Ivy in Eclipse. For this one can download plugin IvyDE.

вторник, 25 декабря 2012 г.

Server side browser detection

Recently, I've been faced with the task to detect user's devices browsers and redirect users to the different sites accordingly.
So, I've  made a search and found out this script for HTTP server (http://detectmobilebrowsers.com/). This script detects many mobile browsers, even my old symbian E52 was detected.
IPad devices are not detected. It's up to you to decide weather should your users be redirected to the mobile versions of your site. So, the real problem for me is how to detect iPad mini?
Http user agent for iPad 2 and iPad mini are the same. You can check the blog here (http://www.mobilexweb.com/blog/ipad-mini-detection-for-html5-user-agent). If anybody can find the solution to this problem, please, share your knowledge.

воскресенье, 26 февраля 2012 г.

Установка Trac на NetBSD 5.1.2

В этой статье я попытаюсь описать как можно поставить программу Trac на NetBSD.

Почему именно NetBSD? Мне всегда хотелось познакомиться поближе с этой ОС. А тут у меня как раз подвернулась подходящая задача. NetBSD 5.1.2 ставится на VirtualBox стандартным образом (смотри руководство по установке NetBSD). Кроме установки trac нам понадобится установить apache, subversion.
После установки NetBSD рекомендуется прочитать man afterboot.

Проведём базовую настройку NetBSD.
Редактируем файл /etc/rc.conf.
Добавим строчки
dhclient=YES
hostname=bsdstation
defaultroute=10.1.240.1
rtclocaltime=YES


Добавим пользователя с помощью команды
useradd -m -G wheel duglas.
Установим пароль с помощью команды
passwd duglas

Пароль password.
Выполним команду sh /etc/rc.d/rtclocaltime restart.

Выполним команды
# dhclient
# PKG_PATH=http://nyftp.netbsd.org/pub/pkgsrc/packages/NetBSD/i386/5.0.2_2011Q4/All
# export PKG_PATH
Пропишем 2 строчки выше по установке переменной PKG_PATH в файле .profile.


Установим bash.
pkg_add -v bash
Команда запуска оболочки находится по пути /usr/pkg/bin/bash.
Список доступных оболочек хранится по пути /etc/shells.
Мы поставили bash, теперь кастомизируем приглашение.
Настройки оболочки хранятся в домашнем каталоге в файле profile.
Выполним команду vi .profile.
Bash считывает переменную PS1.
PS1 поддерживает следующий формат:
a
Makes the computer "beep".
\d
Displays the date in "Weekday Month Date" format.
\h
Displays short hostname.
\H
Displays complete hostname including domain.
\w
Displays current working directory.
\n
Makes the prompt move to a new line.
\s
Displays the name of the shell, e.g. BASH
\t
Displays the current time in 24 hour HH:MM:SS format.
\T
Displays the current time in 12 hour HH:MM:SS format.
\@
Displays the current time in 12 hour am/pm format.
\u
Displays your username.
\!
Displays the number of commands in the history file (.bash_history).
\#
Displays the number of commands you have executed in your current session.

Укажем строчку:
PS1="\t \u@\h:\w$ "; export PS1

Выйдем и войдём в систему заново.

Список команд для работы с пакетами:
pkg_admin
pkg_create
pkg_delete
pkg_info
pkg_install.conf
pkgsrc
pkg_add

Установка Trac.
Установим pkg_add -v py26-sphinx.
Установим pkg_add -v py26-pytz.
Установим pkg_add -v trac.
При такой установке trac тянет за собой slite3.

Создадим пользователя svn с помощью команды useradd -m  svn.
С помощью команды password зададим пароль password для пользователя svn.
Создадим группу groupadd svn_user.
Добавим пользователя svn в группу svn_user usermod -G svn_user svn.

Перейдём в учётку svn.
Выполним команду svnadmin create repository для создания репозитория.
Выполним команду chgrp -R svn_user repository.
Настроим сервис на автоматический запуск.
Откроем файл /etc/inetd.conf.
Добавим строку:
svn stream tcp nowait svn /usr/pkg/bin/svnserve svnserve –i –r /home/svn/repository

Перейдём в каталог /home/svn/repository.
Отредактируем файл ./conf/passwd.
Добавим в нём запись svn = svn, то есть создадим пользователя svn  с паролем svn.
Отредактируем файл ./conf/svnserve.conf.
В раздел [general] добавим запись svn = write.
В этом же файле раскомментируем строку password-db = passwd.

Перегрузим машину и проверим, что на машине доступен порт 3690.
Выполним команду trac-admin /home/svn/tracproject initenv
Имя проекта укажем MyTestProject.
Строка для подключения к базе данных: sqlite:db/trac.db.
Файл настройки trac находится в файле /home/svn/tracproject/conf/trac.ini.
Для тестирования можно запустить trac командой tracd --port 8000 /home/svn/tracproject.
http://10.1.240.107:8000/tracproject
Базовая установка готова!

Установка системы pkgsrc.
Выполним команду от root:
$ cd /usr && cvs -q -z3 -d anoncvs@anoncvs.NetBSD.org:/cvsroot checkout -r pkgsrc-2011Q4 -P pkgsrc

Система пакетов установлена :-)

Теперь установим веб-сервер для работы с trac.
чтобы установить apache:
# cd /usr/pkgsrc/www/apache22
# make install clean clean-depends

Чтобы запускать Apache при запуске выполним,
# cp /usr/pkg/share/examples/rc.d/apache /etc/rc.d
# echo 'apache=YES' >> /etc/rc.conf

Чтобы запустить Apache,
# apachectl start

Размещение httpd.conf по умолчанию
/usr/pkg/etc/httpd
Размещение DocumentRoot по умолчанию
/usr/pkg/share/httpd/htdocs

Установим mod_wsgi:
cd /usr/pkgsrc/www/ap2-wsgi
make install clean clean-depends

Отредактируем файл /usr/pkg/etc/httpd/httpd.conf.
Добавим строку LoadModule wsgi_module lib/httpd/mod_wsgi.so.
Сделаем рестарт apache:
apachectl restart.
Наш сервер не стартует.
В файле httpd.conf закомментируем строку LoadModule unique_id_module lib/httpd/mod_unique_id.so и рестартуем apache.
Теперь введём в браузере http://10.1.240.107/ и увидим, что нам открылась тестовая страница.
Необходимо проверить работоспособность связки apache+mod_wsgi.

Действия будем проводить от имени svn.
Создадим файлик mytest.wsgi со следующим содержимым и поместим его в /home/svn:
def application(environ, start_response):
    status = '200 OK'
    output = 'Hello World!'

    response_headers = [('Content-type', 'text/plain'),
                        ('Content-Length', str(len(output)))]
    start_response(status, response_headers)

    return [output]

Добавим строчку WSGIScriptAlias /mytest /home/svn/wsgi/mytest.wsgi.
Также  перед введённой выше строкой укажем директиву, чтобы apache мог иметь доступ к этому каталогу
<Directory /home/svn/wsgi>
Order allow,deny
Allow from all
</Directory>

Рестартуем apache apachectl restart.
Введём в браузере http://10.1.240.107/mytest и в ответ должно отобразиться сообщение 'Hello World!'.

Это означает, что связка apache+mos_wsgi работает корректно.

Сгенерируем скрипт для запуска trac.
Войдём в учётку svn.
Запустим в домашнем каталоге команду trac-admin tracproject deploy tracdeploy.
Скрипт на питоне находится по пути /home/svn/tracdeploy/cgi-bin/trac.wsgi.
настроим httpd.conf.
Добавим в httpf.conf следующие строки:
WSGIScriptAlias /trac /home/svn/tracdeploy/cgi-bin/trac.wsgi

<Directory /home/svn/tracdeploy>
    WSGIApplicationGroup %{GLOBAL}
    Order deny,allow
    Allow from all
</Directory>

Крайне рекомендуется сделать отображение статических ресурсов напрямую apache.
Редактируем файл httpd.conf.

Добавим следующие строки:
Alias /trac/chrome/common /home/svn/tracdeploy/htdocs/common
Alias /trac/chrome/site /home/svn/tracdeploy/htdocs/site.
Строки необходимо добавить до тега directory к каталогу tracdeploy.

Так как apache выполняется от имени пользователя www, необходимо настроить права доступа к каталогам tracproject,tracdeploy. Для этого добавим пользователя svn в группу www с помощью команды usermod -G www svn.
Выполним в домашнем каталоге www команды chgrp -R www tracdeploy и chgrp -R www tracproject.
настроим Basic аутентификацию.
Создадим от имени svn файл с паролями:
htpasswd -c trac.htpasswd admin
Пароль для пользователя admin - password.
Добавим в файл httpd.conf информацию о файле с паролями.

<Location "/trac/login">
  AuthType Basic
  AuthName "Trac"
  AuthUserFile /home/svn/trac.htpasswd
  Require valid-user
</Location>

Дадим пользователю admin права на администрирование.
Выполним от имени svn команду:
trac-admin tracproject permission add admin TRAC_ADMIN.
Выполним команду в домашнем каталоге svn:
chmod -R g+w tracdeploy tracproject.
Рестартуем apache: apachectl restart.
далее откроем адрес http://10.1.240.107/trac и увидим сообщение:
Error

TracError: The Trac Environment needs to be upgraded.

Run "trac-admin /home/svn/tracproject upgrade"
Выполним приведённую выше команду от имени svn и рестартуем apache.
Опять та же ошибка.
Перейдём в каталог /home/svn/tracproject/conf.
Выполним команду chmod g+r trac.ini.
Снова рестартуем apache.
Откроем http://10.1.240.107/trac и перед нами наконец-таки страничка trac.
Нажмём на ссылку Login.
Введём логин admin пароль password.
Можем продолжить установку.
нужно интегрировать trac и svn.