Base de données 2.6

Tables

  • ox_zones (primary key: zoneid)
  • ox_ad_zone_assoc (primary key: ad_zone_associ_id, fk: zone_id (ox_zones.zoneid), ad_id (ox_banners.bannerid)
    liste des liens entre les zones et les bannières
  • ox_banners (primary key: bannerid)
    Contient le code HTML de la bannière: ox_banners.htmlcache + ox_banners.append
  • ox_data_summary_zone_impression_history
    table qui contient le plus de données...
  • ox_data_raw_ad_impression
select * from ox_ad_zone_assoc;
 ad_zone_assoc_id | zone_id | ad_id |    priority     | link_type | priority_factor | to_be_delivered 

select count(*) from ox_data_summary_zone_impression_history;
select min(interval_start) from ox_data_summary_zone_impression_history;

select * from ox_banners where append != '';

Maintenance

Script cron à toutes les heures: /etc/cron.d/openx

0  * * * *     www-data  /usr/bin/php /var/www/vhost/ads.server.com/scripts/maintenance/maintenance.php ads.server.com

Upgrade 2.4 vers 2.8.11

Environnement: php5, postgresql 8.1, serveur: ads.server.com

1. BACKUP

# mkdir -p /backup/ads.server.com/ && chmod 700 /backup

cd /var/www/vhost/
tar czvf /backup/ads.server.com/{date}.tgz ads.server.com

# conf
cp ads.server.com/var/ads.server.com.conf.php /backup/ads.server.com/

# se connecter sur le serveur de base de données, en postgres et faire un backup de la base de données
$ sudo su - postgres
$ pg_dump -f /tmp/adsserver.{date}.sql adsserver
# mkdir -p /backup/ads.server.com && chmod 700 /backup/ads.server.com/
# cp /tmp/adsserver.{date}.sql /backup/ads.server.com/

2. Vérification

Vérifier que le nom d'usager mot de passe administrateur fonctionne sur le site web (les usagers sont dans: ox_users : select * from ox_users) . Le mot de passe encodé se trouve dans cette table.

3. installer code

wget http://www.opensource.be/openx/files/openx-2.8.11.tar.gz
tar xzvf openx-2.8.11.tar.gz
mv openx-2.8.11 openx

cp ads.server.com/var/ads.server.com.conf.php openx/var/
cp ads.server.com/www/images/*.jpg openx/www/images/
cp ads.server.com/www/images/*.jpeg openx/www/images/
cp ads.server.com/www/images/*.gif openx/www/images/
cp ads.server.com/www/images/*.swf openx/www/images/

chmod 750 openx
chown -R wwwserveruser:www-data openx
chown wwwserveruser:www-data openx/var/ads.server.com.conf.php
chmod 775 openx/var/templates_compiled

# don't seem to work (installer)
chmod 775 openx/var/cache
chmod 775 openx/var/plugins
chmod 775 openx/www/images
chown www-data openx/www/images/*.*

# instruction from install
#==================
chmod -R a+w /var/www/vhost/openx/var
chmod -R a+w /var/www/vhost/openx/var/cache
chmod -R a+w /var/www/vhost/openx/var/plugins
chmod -R a+w /var/www/vhost/openx/plugins
chmod -R a+w /var/www/vhost/openx/www/admin/plugins

# PHP INN
vim /etc/php5/apache2/php.ini
memory_limit = 128M 
date.timezone = America/Montreal

/etc/init.d/apache2 restart
#==================

4. Patch nécessaire - prévenir problème d'installation avec postgresql 8.1

Erreur 1: ALTER SEQUENCE name OWNED BY user.

La syntaxe OWNED BY est disponible seulement dans postgresql 8.2. En 8.1, dans le fichier openx/etc/core.pgsql.php, il faut effacer les lignes:

     EXECUTE 'ALTER SEQUENCE ' || s_old || ' OWNED BY NONE';
     EXECUTE 'ALTER SEQUENCE ' || s_old || ' OWNED BY ' || t_old || '.' || c;

# erreur:
[Native message: ERROR:  syntax error at or near "OWNED" at character 36
QUERY:  ALTER SEQUENCE ox_zones_zoneid_seq OWNED BY None

Erreur 2 : utilisation d'un alias dans un UPDATE

(disponible en postgresql 8.2). En 8.1, dans le fichier openx/etc/changes/postscript_openads_upgrade_2.8.2-rc8.php, il faut modifier les lignes:

                     ac.bannerid = b.bannerid AND
                       ac.type LIKE 'deliveryLimitations:Time:%' AND
                       ac.data NOT LIKE '%@%'
{$tblAcls} ac

par:
                     {$tblAcls}.bannerid = b.bannerid AND
                       {$tblAcls}.type LIKE 'deliveryLimitations:Time:%' AND
                       {$tblAcls}.data NOT LIKE '%@%'
{$tblAcls} 


# erreur:
UPDATE "ox_acls" ac SET data = data || '@' || COALESCE(p.value, 'America/New_York') FROM "ox_banners" b JOIN "ox_campaigns" ca USING (campaignid) JOIN "ox_clients" cl USING (clientid) JOIN "ox_agency" a USING (agencyid) LEFT JOIN "ox_account_preference_assoc" p ON (p.account_id = a.account_id AND p.preference_id = 15) WHERE ac.bannerid = b.bannerid AND ac.type LIKE 'deliveryLimitations:Time:%' AND ac.data NOT LIKE '%@%' ]
Failure in upgrade postscript postscript_openads_upgrade_2.8.2-rc8.php

Erreur 3 : duplicate key

Peut-être erreur de revert, si cette erreur apparaît, il faut effacer les insert dans les fichiers:

  • open/etc/changes/postscript_openads_upgrade_2.7.12.php
  • open/etc/changes/postscript_openads_upgrade_2.7.30-beta-rc5.php
  • open/etc/changes/postscript_openads_upgrade_2.7.31-beta-rc4.php
  • open/etc/changes/postscript_openads_upgrade_2.8.1-rc10.php
# open/etc/changes/postscript_openads_upgrade_2.7.12.php
INSERT INTO "ox_application_variable" ( name, value ) VALUES ( 'mse_process_raw', '1' )
[Native message: ERROR: duplicate key violates unique constraint "ox_application_variable_pkey"]
script returned false OA_UpgradePostscript_2_7_12_dev

# open/etc/changes/postscript_openads_upgrade_2.7.30-beta-rc5.php
INSERT INTO "ox_preferences" (preference_name, account_type) VALUES('campaign_ecpm_enabled', 'MANAGER')
[Native message: ERROR: duplicate key violates unique constraint "ox_preferences_preference_name"]
script returned false OA_UpgradePostscript_2_7_30_beta_rc5

# open/etc/changes/postscript_openads_upgrade_2.7.31-beta-rc4.php
INSERT INTO "ox_preferences" (preference_name, account_type) VALUES('contract_ecpm_enabled', 'MANAGER')
[Native message: ERROR: duplicate key violates unique constraint "ox_preferences_preference_name"]
script returned false OA_UpgradePostscript_2_7_31_beta_rc4

# open/etc/changes/postscript_openads_upgrade_2.8.2-rc10.php
INSERT INTO "ox_application_variable" ( name, value ) VALUES ( 'mse_process_raw', '1' )
[Native message: ERROR: duplicate key violates unique constraint "ox_application_variable_pkey"]

Erreur 4: erreur lors de revert

Il est possible que le revert échoue car la séquence ox_campaigns_campaignid_seq existe.

Solution, dans le client psql: drop sequence ox_campaigns_campaignid_seq;

5. Déplacer

Déplacer l'ancien répertoire vers le nouveau

mv ads.server.com oldads.server.com
mv openx ads.server.com

6. installation

dans le navigateur, ouvrir le serveur pour poursuivre l'installation: http://ads.server.com/

7. effacer l'installeur

rm ads.server.com/www/admin/install.php

Erreur OpenX 2.8.11 avec Postgresql pour les images dans la base de données

Si vous avez des images de bannières dans la base de données (table ox_images), la version 2.8.11 a enlevé une ligne importante qui permet de décoder les données de Postgresql.

Dans les fichier lib/OA/Dal/Delivery.php, www/delivery/ai.php, www/delivery/avw.php, etc, il faut modifier la fonction OA_Dal_Delivery_getCreative pour ajouter la ligne suivante (entre les deux commentaires). Cette ligne est présente en 2.6.

function OA_Dal_Delivery_getCreative($filename)
{
$conf = $GLOBALS['_MAX']['CONF'];
$rCreative = OA_Dal_Delivery_query("
        SELECT
            contents,
            t_stamp
        FROM
            ".OX_escapeIdentifier($conf['table']['prefix'].$conf['table']['images'])."
        WHERE
            filename = '".OX_escapeString($filename)."'
    ");
if (!is_resource($rCreative)) {
return (defined('OA_DELIVERY_CACHE_FUNCTION_ERROR')) ? OA_DELIVERY_CACHE_FUNCTION_ERROR : null;
} else {
$aResult = OA_Dal_Delivery_fetchAssoc($rCreative);

// patch for psql : progysm@gmail.com
$aResult['contents'] = pg_unescape_bytea($aResult['contents']);
// end of patch

$aResult['t_stamp'] = strtotime($aResult['t_stamp'] . ' GMT');
return ($aResult);
}
}

Configuration

# important dans la conf
[database]
type=pgsql
host="IP.IP.IP.IP"
port=5432
username=username
password=***********
name=databasename

[store]
webDir="/var/www/vhost/ads.server.com/www/images"

[email]
fromName=bla
fromAddress="bla@server.com"
fromCompany="bla@server.com"

Migration postgresql 8.1 vers postgresql 9.1

Si on fait un dump SQL de la base de données de 8.1, il faut ajouter des guillemets doubles dans les CREATE TABLE et INSERT pour le champ window de la table ox_data_bkt_a car "window" est devenu un mot réservé en 8.3.

Erreur champ "window"

CREATE TABLE ox_data_bkt_a (
    server_conv_id bigserial NOT NULL,
    server_ip character varying(16) DEFAULT ''::character varying NOT NULL,
    tracker_id integer NOT NULL,
    date_time timestamp without time zone,
    action_date_time timestamp without time zone,
    creative_id integer NOT NULL,
    zone_id integer NOT NULL,
    ip_address character varying(16) DEFAULT ''::character varying NOT NULL,
    "action" integer,
    "window" integer,
    status integer
);

INSERT INTO ox_data_bkt_a ... (..."window"...)

Erreur \' au lieu de ''

PHP Fatal error: Unsupported operand types in www/delivery/ajs.php on line 3762

ligne 3762 : $aZoneLinkedAdInfos += $aZoneInfo;

Cette erreur est causée par une mauvaise requête qui retourne une chaîne de caractères (OA_DELIVERY_CACHE_FUNCTION_ERROR) dans aZoneLinkedAdInfos au lieu d'un tableau et on ne peut pas additionner un tableau à une chaîne de caractère.

# ...
define ('OA_DELIVERY_CACHE_FUNCTION_ERROR', 'Function call returned an error');
# ...

# Remplacer la ligne 
.OX_Dal_Delivery_regex("d.htmlcache", "src\\s?=\\s?[\\'\"]http:")." AS html_ssl_unsafe, "
# par la ligne
.OX_Dal_Delivery_regex("d.htmlcache", "src\\s?=\\s?[''\"]http:")." AS html_ssl_unsafe, "
# car postgres ne supporte plus les \' (barre oblique inversé + guillemet simple) et exige les guillemets simples doubles ''.

Erreur static

lib/pear/PEAR.php : ajouter static pour isError
lib/pear/Net/IPv4.php : ajouter static à ip2double, ipInNetwork, parseAddress

init.php: utiliser error_reporting(E_ALL & ~E_NOTICE & ~E_WARNING & ~E_DEPRECATED & ~E_STRICT);
Source: http://www.teslina.com/en/tutorials/openx/fehlermeldungen-problemlosungen/

Erreur "Call-time pass-by-reference has been removed"

lib/OA/Admin/Statistics/Delivery/CommonEntity.php

# Enlever le caractère & pour les deux lignes:

$oPlugin->mergeZones($this->childrendata['zone_id']);

$oPlugin->mergeAds($this->childrendata['ad_id']);

lib/OA/Admin/Statistics/Delivery/CommonHistory.php

# enlever le caractère & ligne 160

Zone Google Adsense vide en SSL

Dans le fichier /delivery/ajs.php, fonction _adSelectCheckCriteria, remplacer la ligne

(($aAd['adserver'] != 'max' && $aAd['adserver'] != '3rdPartyServers:ox3rdPartyServers:max') || $aAd['html_ssl_unsafe'])) {

Par

(!in_array($aAd['adserver'], array('max','3rdPartyServers:ox3rdPartyServers:max','3rdPartyServers:ox3rdPartyServers:google')) || $aAd['html_ssl_unsafe']) != 'f') {

Note que postgresql retourne "f" si c'est faux.

Étape de vérification

{site}/www/delivery/ajs.php?zoneid={ZONEID}&cb={RAND}&charset=UTF-8&loc={SITE}
  - code vide

{site}/www/admin/banner-edit.php?clientid={CLIENTID}&campaignid={CAMPAIGNID}&bannerid={BANNERID}
  - champ de formulaire
    - adserver = 3rdPartyServers:ox3rdPartyServers:google (select)
    - type = html (hidden)

plugins/3rdPartyServers/ox3rdPartyServers/google.class.php
  - réécriture si "googlesyndication.com"
  - rien pour ssl..