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 № 1Votre 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.