【问题标题】:How do i deploy a schema correctly with DBIx::Class?如何使用 DBIx::Class 正确部署模式?
【发布时间】:2013-09-04 06:36:08
【问题描述】:

我是数据库和 DBIx:Class 的新手。因此,如果这完全是新手的错误,请原谅我。 我只是按照教程进行操作,然后尝试将架构部署到我的数据库中。根据教程,我将模块分成几个文件。在我运行 createTable.pl 'mysqlshow bla' 后显示一个空数据库。

数据库已启动并正在运行。通过 mysql CREATE TABLE 语句创建表确实有效。

应该根据模式创建表的脚本文件 ../createTable.pl

#!/usr/bin/env perl
use Modern::Perl;
use MyDatabase::Main;

my ($database, $user) = ('bla', 'flo');
my $schema = MyDatabase::Main->connect("dbi:mysql:dbname=$database", "$user");

$schema->deploy( { auto_drop_tables => 1 } );

Main.pm 用于加载命名空间 ../MyDatabase/Main.pm

package MyDatabase::Main;
use base qw/ DBIx::Class::Schema /;

__PACKAGE__->load_namespaces();

1;

表的架构文件 ../MyDatabase/Result/Album.pm

package MyDatabase::Main::Result::Album;
use base qw/ DBIx::Class::Core /;

__PACKAGE__->load_components(qw/ Ordered /);
__PACKAGE__->position_column('rank');
__PACKAGE__->table('album');
__PACKAGE__->add_columns(albumid =>
             { accessor  => 'album',
               data_type => 'integer',
               size      => 16,
               is_nullable => 0,
               is_auto_increment => 1,
             },
             artist =>
             { data_type => 'integer',
               size      => 16,
               is_nullable => 0,
             },
             title  =>
             { data_type => 'varchar',
               size      => 256,
               is_nullable => 0,
             },
             rank =>
             { data_type => 'integer',
               size      => 16,
               is_nullable => 0,
               default_value => 0,
             }
            );
__PACKAGE__->set_primary_key('albumid');

1;

我已经花了几个小时通过 google 寻找帮助,但与 deploy() 方法没有太大关系。 谁能解释我的错误是什么? 谢谢

【问题讨论】:

  • 您会收到什么错误信息(如果有)?
  • 不幸的是没有错误信息。为了检查与数据库的连接是否有效,我将 $database 变量更改为不存在的数据库。然后有一条错误消息。但没有正确数据库名称的错误消息。

标签: mysql perl dbix-class


【解决方案1】:

您可以在 metacpan.org(更新,全文索引)和 search.cpan.org 上找到所有 CPAN Perl 模块的文档。

阅读 DBI 的文档,您会发现一个名为 DBI_TRACE 的环境变量,当设置该变量时会将每个 SQL 语句打印到 STDOUT。 DBIx::Class 有一个类似的称为 DBIC_TRACE。 第一个应该可以帮助您查看 deploy 方法在做什么。

连接数据库不需要密码吗?

【讨论】:

  • 不,不需要密码,现在它只是用于测试和玩 perl 和数据库。感谢您对 DBIC_TRACE 的提示,我会尽快查找并试用。
  • 到目前为止,我还没有时间进一步研究 perl 和数据库的东西 :( 当有一些进展时,我会在这里报告。无论如何,谢谢你的提问!
【解决方案2】:

好吧,今天我又玩了一遍 perl 和数据库的东西,我发现了错误所在。

首先,我从 DBI_TRACE 和 DBIC_TRACE 开始,它产生了很多消息,但我无法处理,对我来说,似乎没有任何关于这个问题的提示。

然后我在谷歌上搜索了一段时间关于这个问题以及部署方法的更多示例。在某些时候我注意到我的文件夹结构是错误的。

表的Schema文件应该放在

../MyDatabase/Main/Result/Album.pm

而不是被放置在

../MyDatabase/Result/Album.pm

将架构文件移动到正确的文件夹后,一切正常。

为这个错误感到羞耻:(但谢谢你的帮助

【讨论】:

  • 我错过了那个,你甚至在上面写了:表的架构文件../MyDatabase/Result/Album.pm package MyDatabase::Main::Result::Album;这就是 Perl 中命名空间的工作方式:路径 + 文件名必须与包含的包匹配。
  • 我很感激这个提示,因为我遇到了同样的问题。可能是网上的一些教程错了,从这玩意开始,没有看到这种错误。
猜你喜欢
  • 2014-04-24
  • 1970-01-01
  • 2014-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-09
  • 2011-05-26
相关资源
最近更新 更多