Submitted by Nox on
Bonsoir,
Je cherche à faire un script php pour pré-configurer l'installation d'un site drupal, en mode multi-site.
Je penses qu'il y a comme un problème de transmission de la variable $settings à donner en paramètre de la fonction d'installation install_drupal(), qui se situe dans includes/install.core.inc
En effet, des la première étape, vérification de l'existence de settings.php, la fonction d'installation va chercher dans sites/default, au lieu de regarder dans le fichier que je lui es spécifié.
$value est un tableau qui contiens des informations récupéré par une requête SQL.
define('MAINTENANCE_MODE', 'install');
define('DRUPAL_ROOT', getcwd());
$mysettings = build_settings($value);
require_once (DRUPAL_ROOT . '/includes/install.core.inc');
echo "database: " . $mysettings["forms"]["install_settings_form"]["database"] . "<br>";
echo "prefix: " . $mysettings["forms"]["install_settings_form"]["db_prefix"] . "<br>";
install_drupal($mysettings);
echo "Felicitation, votre site a ete cree !!";
function build_settings(&$value)
{
return array(
# First, tell Drupal you are not using the interactive installer.
'interactive' => FALSE,
# This part is required for multisite support. The keys
# you put here overwrite the $SERVER array, allowing Drupal
# to find a site path (in this case, localhost.my.site, my.site etc.
'server' => array(
'HTTP_HOST' => 'localhost',
'SCRIPT_NAME' => 'sites/' . $value["adresse"],
),
# Next, choose the profile and locale Drupal should use.
# The profile must be in a ./profiles/$profile/ folder.
'parameters' => array(
'profile' => 'standard',
'locale' => 'en',
),
# This is the data that will be submitted to the various
# forms in the installation wizard.
'forms' => array(
# Database configuration.
'install_settings_form' => array(
'driver' => 'mysql',
'database' => 'mybdd',
'username' => 'myusername',
'password' => 'mypwd',
'host' => 'localhost',
'port' => '',
'db_prefix' => $value["id"] . '_',
),
# Site information, and the data of the root user.
'install_configure_form' => array(
'site_name' => $value["name"],
'site_mail' => 'contact@mysite.fr',
'account' => array(
'name' => 'root',
'mail' => 'contact@mysite.fr',
'pass' => array(
# This is a bit of a WTF, but that's the way it works.
# Even non-interactively, password fields require two identical values.
'pass1' => 'root',
'pass2' => 'root',
),
),
# This is the timezone of the Drupal site. You can find the
# PHP timezone strings at http://php.net/timezones
'site_default_country' => 'DE',
'date_default_timezone' => 'Europe/Berlin',
'clean_url' => TRUE,
# Check for updates:
# array() = off,
# array(1) = on,
# array(1, 2) = on, and notify by email
'update_status_module' => array(),
),
),
);
}
Les deux echo affiche bien les informations que qui sont entré dans $mysettings
Et pourtant les données semble mal transmise à la fonction...
J'ai créé le fichier settings.php dans default pour essayer, mais malgré les informations correcte, entré dans $mysettings, la fonction d'installation n'arrive pas à se connecter à la BDD et m'écris une erreur en me disant que le nom de la bdd et l'utilisateur doivent être indiqué.
Avez-vous une idée d'où cela peut venir ?
Merci d'avance de vos réponses.
Je n’ai pas essayé ce genre
Permalien Soumis par Numerizen le 11 Octobre, 2011 - 09:18
Je n'ai pas essayé ce genre de choses, mais le message complet pourrait peut-être aider. C'est un message Drupal ou Mysql ?
C’est un message drupal.
Permalien Soumis par Nox le 17 Octobre, 2011 - 22:30
C'est un message drupal. Voila l'erreur avec settings.php dans default.
Erreur : Database name field is required. Database username field is required.
In order for Drupal to work, and to continue with the installation process, you must resolve all issues reported below. For more help with configuring your database server, see the installation handbook. If you are unsure what any of this means you should probably contact your hosting provider.
Failed to connect to your database server. The server reports the following message: SQLSTATE[28000] [1045] Access denied for user 'www-data'@'localhost' (using password: NO).
Is the database server running?
Does the database exist, and have you entered the correct database name?
Have you entered the correct username and password?
Have you entered the correct database hostname?
Et sans settings.php dans default:
Erreur : Settings file: The settings file does not exist. The Drupal installer requires that you create a settings file as part of the installation process. Copy the ./sites/default/default.settings.php file to ./sites/default/settings.php. More details about installing Drupal are available in INSTALL.txt.
Pourtant juste avant j'ai des echo qui affiche les bonnes informations..
En survolant, comme je ne
Permalien Soumis par Numerizen le 20 Octobre, 2011 - 09:27
En survolant, comme je ne sais pas d'où vient la variable $mysettings ni comment elle est configurée, il est difficile de savoir ce qui cliche. En plus, je ne connais pas votre environnement, et je n'ai jamais utilisé ses fonctions d'install automatique.
Je déclare donc forfait sur ce cas.
Bonsoir, La variable
Permalien Soumis par Nox le 20 Octobre, 2011 - 23:10
Bonsoir,
La variable $mysettings vient de la fonction build_settings() juste en dessous.
C'est un tableau des configurations de l'installation.
Et je suis sous Debian, mais je ne me rappel plus de la version.
Merci tout de même d'avoir essayé.
Sais-tu où je pourrais trouver ces informations, ou qui pourrait me les donner?
Car je n'arrête pas de fouiller la document de drupal dessus, mais je ne trouve rien du tout...
Oui, je n’ai pas très bien
Permalien Soumis par Numerizen le 21 Octobre, 2011 - 11:52
Oui, je n'ai pas très bien regardé, pardon.
Il y a un truc récent sur Drupal Planet à propos des install profiles : http://scotthadfield.ca/2011/10/20/overview-d7-install-profiles
Sinon il y a ça : http://drupal.org/node/159730 mais je suppose que tu es déjà allé voir.
Pas de soucis. Oui j’ai déjà
Permalien Soumis par Nox le 25 Octobre, 2011 - 22:54
Pas de soucis.
Oui j'ai déjà regardé ça.
Mais ce n'est pas un profil d'installation, c'est encore autre chose ^^
Par contre je connais pas la doc de Drupal Planet, je vais regarder.
Merci.
Salut, J’essaie aussi de
Permalien Soumis par KLicheR le 6 Janvier, 2012 - 21:19
Salut,
J'essaie aussi de créer un script du genre. Mon script est très semblable au tient, je l'ai pris de Drush 4.5. Ce qui semble poser problème, c'est la partie "install_settings_form".
En explorant le fichier "install.core.inc" de Drupal 7.10, j'ai pu placer du code qui me retourne ce que retourne normalement l'installateur intéractif, ce qui devrait en principe être la même chose que l'on utilise pour installer Drupal à partir d'un script non?
J'en ai découvert une petite variante:
'install_settings_form' => array (
'driver' => 'mysql',
'mysql' => array (
'database' => 'r2_com',
'username' => 'root',
'password' => 'quickstart',
'db_prefix' => '',
'host' => 'localhost',
'port' => '',
),
'save' => 'Enregistrer et continuer',
'op' => 'Enregistrer et continuer',
)
Du coup, je tombe sur ce message d'erreur:
Database name field is required.
Database username field is required.
Exception: Database name field is required. Database username field is required. in install_run_task() (line 421 of /home/quickstart/websites/r2.com/includes/install.core.inc).
Si tu trouves la solution, merci de partager!
Après plusieurs jours de
Permalien Soumis par KLicheR le 10 Janvier, 2012 - 17:33
Après plusieurs jours de recherche, j'ai trouvé que les erreurs sur le nom de la base de données et le nom d'utilisateur ont attrait aux valeurs concernant PostGres, même si celui n'est pas choisis.
Et donc, ceci fonctionne très bien:
'install_settings_form' => array (
'driver' => 'mysql',
'mysql' => array (
'database' => 'r2_com',
'username' => 'root',
'password' => 'quickstart',
'db_prefix' => '',
'host' => 'localhost',
'port' => '',
),
'pgsql' => array (
'database' => 'x',
'username' => 'x',
),
'save' => 'Enregistrer et continuer',
'op' => 'Enregistrer et continuer',
)
L'erreur vient donc de la validation du formulaire dans Drupal. Reste à savoir où...