Revision 253

Date:
2012/09/26 16:26:49
Author:
ahitrov
Revision Log:
Sessions through Memcached
Files:

Legend:

 
Added
 
Removed
 
Modified
  • koi8/plugins/session/config.proto

     
    6 6 #############################################################################
    7 7
    8 8 PLUGINS += session
    9 PROJECT_REQUIRED += Apache-Session
    9 PROJECT_REQUIRED += Apache-Session Apache-Session-Memcached
    10 10 PROJECT_REQUIRED += JSON-XS
    11 11 PROJECT_REQUIRED += P-WebFetcher
    12 12
     
    32 32
    33 33 REWRITE += SESSION_STORAGE SESSION_DOMAIN SESSION_LIFETIME SESSION_EXPIRES
    34 34
    35 ########################################################################
    35 ###########################################################################
    36 36 #
    37 37 # SESSION_DOMAIN
    38 38 # �����, �� ������� �������� ������. ����� �� ���������
    39 39 # SESSION_STORAGE
    40 # ��������� ��� �������� ������. ��������: POSTGRES � FILE
    40 # ��������� ��� �������� ������. ��������: POSTGRES, MEMCACHED, FILE
    41 # ��� ������ ������ ����� Memcached � ������� ������� ��� �����������
    42 # ������ ���� ����������� ���������
    43 # MEMCACHED_ENABLE = 1
    44 # MEMCACHED_SERVERS = ������ �������� � �������, ����������� ���������
    41 45 # SESSION_LIFETIME
    42 46 # ����� ����� ������ �� �����������. �������� � �����, ������������
    43 47 # ��� ��������� � crontab ������� ������� �� services
    44 48 # SESSION_EXPIRES
    45 49 # ����� ����� ���� ������. �������� � ������� Apache
    46 50 #
    47 ########################################################################
    51 ###########################################################################
    48 52
    49 53
    50 54 ### AUTH::FaceBook
  • koi8/plugins/session/lib/session/Keeper.pm

     
    7 7 use Apache::Cookie;
    8 8 use Apache::Session::File;
    9 9 use Apache::Session::Postgres;
    10 use Apache::Session::Memcached;
    10 11 use Contenido::Globals;
    11 12 use Data::Dumper;
    12 13
     
    205 206 Handle => $keeper->SQL,
    206 207 };
    207 208 };
    209 } elsif ( $state->{session}->storage eq 'MEMCACHED' ) {
    210 eval {
    211 tie %session, 'Apache::Session::Memcached', $sid, {
    212 Handler => $keeper->{session}->MEMD,
    213 Expiration => $state->{session}->{lifetime},
    214 # Servers => $state->{session}->memcached_servers,
    215 # NoRehash => 1,
    216 # Readonly => 0,
    217 # Debug => $DEBUG,
    218 # CompressThreshold => 10_000
    219 };
    220 };
    208 221 } else {
    209 222 eval {
    210 223 tie %session, 'Apache::Session::File', $sid, {
    211 Directory => $state->session->session_dir,
    224 Directory => $state->{session}->session_dir,
    212 225 };
    213 226 };
    214 227 }
     
    231 244 Handle => $keeper->SQL,
    232 245 };
    233 246 };
    247 } elsif ( $state->{session}->storage eq 'MEMCACHED' ) {
    248 eval {
    249 tie %session, 'Apache::Session::Memcached', undef, {
    250 Handler => $keeper->{session}->MEMD,
    251 Expiration => $state->{session}->{lifetime},
    252 # Servers => $state->{session}->memcached_servers,
    253 # NoRehash => 1,
    254 # Readonly => 0,
    255 # Debug => $DEBUG,
    256 # CompressThreshold => 10_000
    257 };
    258 };
    234 259 } else {
    235 260 eval {
    236 261 tie %session, 'Apache::Session::File', undef, {
  • koi8/plugins/session/lib/session/State.pm.proto

     
    12 12 bless $self, $class;
    13 13
    14 14 # ������� ������������ �������
    15 $self->{project} = '@PROJECT@';
    16
    15 17 $self->{db_type} = 'none';
    16 18 $self->{storage} = '@SESSION_STORAGE@' || 'FILE'; ## ��������: FILE POSTGRES MEMCACHED
    17 19 $self->{session_dir} = '@SESSIONS@';
     
    39 41 $self->{debug} = '';
    40 42 $self->{store_method} = '';
    41 43 $self->{cascade} = '';
    42 $self->{memcached_enable} = '';
    43 44
    45 $self->{memcached_enable} = lc( '@MEMCACHED_ENABLE@' ) eq 'yes' ? 1 : 0;
    46 $self->{memcached_backend} = '@MEMCACHED_BACKEND@';
    47 $self->{memcached_select_timeout} = '@MEMCACHED_SELECT_TIMEOUT@' || 0.2;
    48 $self->{memcached_servers} = [qw(@MEMCACHED_SERVERS@)];
    49 $self->{memcached_enable_compress} = lc( '@MEMCACHED_ENABLE_COMPRESS@' ) eq 'yes' ? 1 : 0;
    50 $self->{memcached_delayed} = lc('@MEMCACHED_DELAYED@') eq 'yes' ? 1 : 0;
    51 $self->{memcached_set_mode} = lc('@MEMCACHED_SET_MODE@') eq 'add' ? 'add' : 'set';
    52 $self->{memcached_busy_lock} = 60;
    53 $self->{memcached_namespace} = lc( $self->{'project'} ).'|plugin_session|';
    54
    55 $self->{memcached_object_expire} = undef;
    56
    57 $self->{storage} = 'FILE' if $self->{storage} eq 'MEMCACHED' && !$self->{memcached_enable};
    58
    44 59 $self->{facebook_app_id} = '@FACEBOOK_APP_ID@';
    45 60 $self->{facebook_app_secret} = '@FACEBOOK_APP_SECRET@';
    46 61 $self->{facebook_redirect_uri} = '@FACEBOOK_REDIRECT_URL@';
     
    92 107 db_name
    93 108 db_user
    94 109 db_password
    95 data_directory images_directory binary_directory preview debug store_method cascade memcached_enable
    110
    111 memcached_enable
    112 memcached_servers
    113 memcached_select_timeout
    114 memcached_backend
    115 memcached_enable_compress
    116 memcached_set_mode
    117 memcached_object_expire
    118 memcached_busy_lock
    119 memcached_delayed
    120 memcached_namespace
    121
    122 data_directory
    123 images_directory
    124 binary_directory
    125 preview
    126 debug
    127 store_method
    128 cascade
    96 129 );
    97 130 }
    98 131

Небольшая справка по веткам

cnddist – контейнер, в котором хранятся все дистрибутивы всех библиотек и программных пакетов, которые использовались при построении различных версий Contenido. Если какой-то библиотеки в данном хранилище нет, инсталлятор сделает попытку "подтянуть" ее с веба (например, с CPAN). Если библиотека слишком старая, есть очень большая вероятность, что ее там уже нет. Поэтому мы храним весь хлам от всех сборок. Если какой-то дистрибутив вдруг отсутствует в cnddist - напишите нам, мы положим его туда.

koi8 – отмирающая ветка, чей код, выдача и все внутренние библиотеки заточены на кодировку KOI8-R. Вносятся только те дополнения, которые касаются внешнего вида и функционала админки, баги ядра, обязательные обновления портов и мелочи, которые легко скопипастить. В дальнейшем планируется полная остановка поддержки по данной ветке.

utf8 – актуальная ветка, заточенная под UTF-8.

Внутри каждой ветки: core – исходники ядра; install – скрипт установки инсталляции; plugins – плагины; samples – "готовые к употреблению" проекты, которые можно поставить, запустить и посмотреть, как они работают.