/ / Comment créer plusieurs connexions à une base de données dans Catalyst avec DBIC - base de données, perl, postgresql, catalyseur, classe dbix

Comment créer plusieurs connexions de base de données dans Catalyst avec DBIC - base de données, perl, postgresql, catalyseur, classe dbix

J'essaie de me connecter à deux bases de données postgres sur le même hôte sans avoir de chance. (Ce sont deux bases de données distinctes et non deux schémas.)

j'utilise Schema::Loader pour créer mes fichiers de classe de résultats ainsi que les fichiers de connexion à la base de données à l'aide des commandes suivantes:

Première base de données:

script/myapp_create.pl model DB DBIC::Schema MyApp::Schema create=static dbi:Pg:dbname=handshake_vt "user" "pw" "{ AutoCommit => 1 }"

Pour mon Deuxième base de données, devrais-je mettre les classes de tables dans le même schéma comme ceci:

script/myapp_create.pl model DB2 DBIC::Schema MyApp::Schema create=static dbi:Pg:dbname=members_vt "user" "pw" "{ AutoCommit => 1 }"

ou devrais-je créer un schéma nom_espace séparé comme ceci:

script/myapp_create.pl model DB2 DBIC::Schema MyApp::Schema::Members create=static dbi:Pg:dbname=members_vt "user" "pw" "{ AutoCommit => 1 }"

J’ai essayé les deux options et j’obtiens des erreurs légèrement différentes avec les deux approches.

Vous trouverez ci-dessous les fichiers que j'utilise avec l'approche de schéma unique:

1.  DB.pm

package MyApp::Model::DB;

use strict;
use base "Catalyst::Model::DBIC::Schema";

__PACKAGE__->config(
schema_class => "MyApp::Schema",

connect_info => {
dsn => "dbi:Pg:dbname=handshake_vt",
}
);


2.  DB2.pm

package MyApp::Model::DB2;

use strict;
use base "Catalyst::Model::DBIC::Schema";

__PACKAGE__->config(
schema_class => "MyApp::Schema",

connect_info => {
dsn => "dbi:Pg:dbname=legislators_vt",
}
);


3.  Schema.pm

package MyApp::Schema;

__PACKAGE__->load_namespaces;;

Ma classe de table ressemble en gros à ceci:

package Handshake::Schema::Result::Country;

…

__PACKAGE__->table("countries");

Merci pour toute aide.

Réponses:

3 pour la réponse № 1

Votre première approche avec la création de différents schémas, un pour chaque base de données, est la bonne.

Chaque base de données obtient son propre DBIx::Class schéma dans des espaces de noms Perl distincts.

Si vous souhaitez utiliser le schéma DBIC en dehors de votre application Catalyst, il est judicieux de choisir également un espace-noms en dehors de l'application Catalyst.

par exemple Company::Model::DB1, Company::Model::DB2 and Company::Web::App.

Ensuite, vous créez un modèle Catalyst pour chaque schéma DBIx :: Class avec les différents paramètres de connexion.

Dans Catalyst, vous accédez aux deux modèles à l'aide de $c->model("DB1") et $c->model("DB2").


0 pour la réponse № 2

Vous devez créer deux schémas distincts (pas un) et deux modèles.