2013-08-31 23 views
3

我是新來的數據庫和DBIx:Class。所以請原諒我,如果這是一個全新的故障。 我只是按照教程,然後我試圖將架構部署到我的數據庫。根據教程,我將模塊分成幾個文件。在我運行createTable.pl'mysqlshow bla'後,顯示了一個空的數據庫。如何使用DBIx :: Class正確部署模式?

數據庫已啓動並正在運行。通過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

架構創建一個表 Skript文件爲表../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; 

我已經花了幾個小時尋找谷歌的幫助,但與deploy()方法沒有多大關係。 任何人都可以解釋我的錯誤是什麼? 謝謝

+0

你會得到什麼錯誤信息? –

+0

不幸的是沒有錯誤信息。檢查,連接到數據庫的工作原理,我將$數據庫變量更改爲不存在的數據庫。那麼就有一個錯誤信息。但沒有正確的數據庫名稱的錯誤消息。 – derflo

回答

1

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

閱讀DBI的文檔,您會發現一個名爲DBI_TRACE的環境變量,它在設置時會將每條SQL語句都打印到STDOUT。 DBIx :: Class有一個類似的叫做DBIC_TRACE。 第一個應該幫助你看看部署方法在做什麼。

連接數據庫是否需要密碼?

+0

不,沒有passowrd的要求,現在它只是測試和perl和數據庫玩耍。感謝您在DBIC_TRACE上的提示,我會查找並儘快嘗試。 – derflo

+0

你有部署工作嗎? –

+0

我還沒有時間進一步玩perl和數據庫的東西,直到現在:(我會報告這裏,當有一些進展。無論如何感謝提問! – derflo

1

好吧,今天我再次與Perl和數據庫的東西玩,我發現了什麼錯誤。

首先,我從DBI_TRACE和DBIC_TRACE開始,它產生了很多消息,但沒有我能處理,對我來說,似乎沒有任何東西給我提示這個問題。

然後我搜索了一會兒關於這個問題的谷歌和更多的部署方法的例子。在某個時候,我注意到我的文件夾結構是錯誤的。

該表的模式文件應該被放置在

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

,而不是被置於

../MyDatabase /Result/Album.pm

將Schema文件移動到正確的文件夾後,一切正常。

對我這個錯誤感到羞恥:(但是謝謝你的幫助

+0

我錯過了那一個,你甚至寫了上面:架構文件表../MyDatabase/Result/Album.pm包MyDatabase :: Main :: Result :: Album;這就是Perl中的命名空間的工作原理:路徑+文件名必須與包含的包匹配 –

+0

我很感激這個提示是因爲我遇到了同樣的問題,也許網上的一些教程是錯誤的,從這些東西開始,人們就不會看到這種錯誤。 – cslotty

相關問題