profile
4 июня 2008асечное:
cat ~/.profile
PATH=/usr/local/bin:$PATH
alias CHE="svn stat | grep -v '?'"
alias DAY="svn update"
alias NA="svn commit"
alias CHEZANAH="svn diff"
alias KAKOYMUDAK="svn blame"
асечное:
cat ~/.profile
PATH=/usr/local/bin:$PATH
alias CHE="svn stat | grep -v '?'"
alias DAY="svn update"
alias NA="svn commit"
alias CHEZANAH="svn diff"
alias KAKOYMUDAK="svn blame"
Мой текущий похапэ-фреймворк Kohanaphp для тестирования предоставляет модуль, работающий через веб-интерфейс…
Мне это несколько дико, поэтому нацарапал консольную приблуду на ruby, которая парсит этот самый веб-интерфейс.
Скриншот прилагается.
Для использования поправить SITE_URL в 17й строке и chmod a+x
run_tests.rb
Чувак после работы с Django хвалит Zend Framework. Или это агент влияния или я ему не верю.
Завел таки железяку сабжевую. Opensuse 10.3 дома и на работе.
Всего-то нужно было снести libgpod2, поставить libgpod3 (V0.6.0 is the first release to support the new iPod Classics and Nano Videos), после этого обновился Amarok.
В общем, все линуксячие приложения (floola, amarok, etc) для синхронизации юзают libgpod, разрабатываемый под gtkpod.
Зря только время потратил на то, чтобы iTunes под wine заработало. Оно-то заработало, но свою железяку в упор не видит.
Вывод: щас все брошу и виндовс поставлю.
В транке мого коханого фреймворку обнаружилась прикольная хакерская локаль 13_37
пример прилагается )))
$lang = array
(
'there_can_be_only_one' => '7h3r3 c4n b3 0n|y 0n3 1n574nc3 0f K0h4n4 p3r p463 r3qu357.',
'uncaught_exception' => 'Unc4u6h7 %s: %s 1n f1|3 %s 0n |1n3 %s',
'invalid_method' => '1nv4|1d m37h0d <tt>%s</tt> c4||3d 1n <tt>%s</tt>.',
'cannot_write_log' => 'Y0ur |06.d1r3c70ry c0nf16 53771n6 d035 n07 p01n7 70 4 wr174b|3 d1r3c70ry.',
'resource_not_found' => '7h3 r3qu3573d %s, <tt>%s</tt>, c0u|d n07 b3 f0und.',
'no_default_route' => 'P|3453 537 4 d3f4u|7 r0u73 1n <tt>c0nf16/r0u735.php</tt>.',
'no_controller' => 'K0h4n4 w45 n07 4b|3 70 d373rm1n3 4 c0n7r0||3r 70 pr0c355 7h15 r3qu357: %s',
'page_not_found' => '7h3 p463 y0u r3qu3573d, <tt>%s</tt>, c0u|d n07 b3 f0und.',
'stats_footer' => '|04d3d 1n {execution_time} 53c0nd5, u51n6 {memory_usage} 0f m3m0ry. 63n3r473d by K0h4n4 v{kohana_version}.',
'error_message' => '3rr0r 0ccurr3d 47 <57r0n6>|1n3 %s</57r0n6> 0f <strong>%s</strong>.'
);
Удачно так сходил, выиграл Ipod Nano 8GB

С линуксами, естественно, проблемы.
“Неприятный сюрприз приготовила компания Apple пользователям ОС Linux. Дело в том, что последнее поколение популярных плееров iPod не работает с открытой ОС.
Происходит это потому, что в новые плееры встроена функция автоматического присваивания криптографической контрольной суммы базе данных записей, находящихся в памяти устройства. Это необходимо для того, чтобы приложения сторонних разработчиков не смогли синхронизировать контент с плеерами iPod.”
мастдайный iTunes кое-как завелся под wine, зато не увидел железяку.
Прослушал 3 доклада по python. Метаклассы и дескрипторы / PEAK rules / Django как платформа для фрилансера.
Для поверхностно знакомого с питоном это грузок. До ruby не дождался, но там доклады были тоже нишевые. Stroke DB какое-то ))). Подозреваю, что это что-то типа KirbyBase
проблема:
не получается выполнять команды на удаленном хосте
no such file or directory: /usr/bin/env (php, mysql, etc.)
решение: установка $PATH
default_environment["PATH"] = '/opt/csw/php5/bin:/opt/csw/mysql5/bin:/opt/csw/bin:/usr/sbin:/usr/local/bin:$PATH'
проблема: аяяй, чекаут кода (таски setup, update_code, rollback_code, and symlink) пытается выполняться во всех ролях!! (на мейл сервере, на MySQL сервере и т.д. )
решение: прописываем у таких ролей :no_release => true
role :mail, config_production[:mail][:host], :no_release => true
role :solr, config_production[:solr][:host], :no_release => true
role :db, config_production[:db][:host], :no_release => true
проблема: не можем выполнить удаленную команду, т.к. не можем даже влогиниться (начиная от версии Capistrano 2.1)
** [err] Permission denied, please try again. ** [err] Permission denied, please try again. ** [err] Permission denied (publickey,gssapi-with-mic,password). svn: Connection closed unexpectedly
решение: Начиная с версии 2.1, капистрано больше не запрашивает pty в каждой команде. Проблема в том, что на некоторых системах (на Соляре точно, проверено) некоторые команды (svn, passwd) автоматически впадают в неинтерактивный режим.
# по умолчанию оно false
default_run_options[:pty] = true
проблема: я хочу получить данные коннекта к базе от пхпшного приложения в руби, и юзать для сетапа чего-нибудь, и пусть мне дадут готовый хеш
решение: (для Symfony)
php кусок
// гдето тут берется DSN
// mysql://root:pwd@localhost/mydb
$data = preg_split('(://|@|/|:)', $link);
list($conf_arr[':dbtype'], $conf_arr[':user'], $conf_arr[':pass'], $conf_arr[':host'], $conf_arr[':dbname']) = $data;
echo base64_encode(sfYaml::dump($conf_arr));
руби кусок (получаем настоящий юзабельный тру-хеш с символами в кач. ключей)
# Get DB conf
desc "Get DB connection hash"
task :db_get_conf, :roles => :web do
enc = ""
run "cd #{app} && php deploy-db-sendconf.php" do |channel, stream, data|
enc = data
raise data if stream == :err
end
# base64decode & convert to hash from YAML
YAML.load enc.unpack("m")[0]
end
авторизация (ручками)
# restart apache webserver
desc "Restart the web server"
task :restart, :roles => :web do
sudo "svcadm restart svc:/network/http:cswapache2" do |ch, stream, out|
ch.send_data "#{sudo_password}\n" if out =~ /^Password:/
raise out if stream == :err
end
end
вроде бы хватит сегодня
gem 'capistrano', '>= 2.1.0'
require 'capistrano/cli' # капистрановский command-line utility
require 'modules/logger/' # свой логгер
# почему-то родной конфиг был только для чтения, а мы хотим писать (смотреть ниже cap_conf.logger к примеру)
module Capistrano
class Configuration
attr_accessor :config
end
end
# а вот и наш экземпляр, который хавает таски и выполняет
cap_conf = Capistrano::Configuration.new
# вот свой логгер
cap_conf.logger = DepLogger.getInstance()
# грузим задачи
cap_conf.load 'deploy' # базовые таски из lib/capistrano/recipes/deploy.rb
# файлы задач названы инкрементально (01_xxx.rb, 02_xxx.rb, 03_xxx.rb)
Dir['tasks/*.rb'].sort.each do |plugin|
cap_conf.load(plugin)
end
Используется вышеозначенное примерно вот так:
cap_conf.myproject.create
В namespace myproject таск create выглядит так:
namespace :myproject do
desc "Create Myproject"
task :create, :roles => :web do
# включаем транзакцию
transaction do
on_rollback do
site.rm_after_import # site это один из таск-неймспейсов, подгруженых ранее.
end
# выполнение тасков
site.task1
# ...
# ...
site.task10
end
end
end
Чтобы удалить роровское непотребство при деплоймент процессе, переопределяем родной deploy:finalize_update в одном из тасков, напр в 10_xxx.rb
речь идет о директориях log, public, tmp, system, pids, все то, что закомментировано.
# Override some RoR artefacts
namespace :deploy do
desc < <-DESC
Touches up the released code, etc. See original Capistrano description
DESC
task :finalize_update, :except => { :no_release => true } do
sudo "chmod -R g+w #{latest_release}" if fetch(:group_writable, true)
sudo "chown -R #{conf[:owner_user]}:#{conf[:owner_group]} #{latest_release}"
# mkdir -p is making sure that the directories are there for some SCM's that don't
# save empty folders
#run < <-CMD
# rm -rf #{latest_release}/log #{latest_release}/public/system #{latest_release}/tmp/pids &&
# mkdir -p #{latest_release}/public &&
# mkdir -p #{latest_release}/tmp &&
# ln -s #{shared_path}/log #{latest_release}/log &&
# ln -s #{shared_path}/system #{latest_release}/public/system &&
# ln -s #{shared_path}/pids #{latest_release}/tmp/pids
#CMD
end
end
В принципе это все. Как обойти некоторые спотыкачки (хождение через gateway только в одной из ролей, неработающий sudo, etc.), опишу в следующий раз.
Если сайт прячет заголовки сервера
Date: Fri, 29 Feb 2008 10:22:08 GMT
Server: Apache/2.2.3 (CentOS) DAV/2 SVN/1.4.2 mod_ssl/2.2.3 OpenSSL/0.9.8b PHP/5.2.4 mod_fastcgi/2.4.6
или заменяет расширения *.php файлов на скажем, *.zoo, *.asp (чтобы ввести в заблуждение и затруднить взлом)
у php есть странные способы сказать всем, что да, я написан на пхп
к урлу добавляем
и отбрасываем всякие сомнения прочь