Как правильно развернуть схему с помощью DBIx::Class?

я новичок в базах данных и в 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(). Может ли кто-нибудь объяснить мне, в чем моя ошибка? Спасибо


person derflo    schedule 31.08.2013    source источник
comment
Какое сообщение об ошибке вы получаете, если оно есть?   -  person Burhan Ali    schedule 31.08.2013
comment
к сожалению нет сообщения об ошибке. чтобы проверить, что соединение с базой данных работает, я изменил переменную $database на несуществующую базу данных. затем появляется сообщение об ошибке. но нет сообщения об ошибке с правильным именем базы данных.   -  person derflo    schedule 31.08.2013


Ответы (2)


Вы можете найти документацию для всех Perl-модулей CPAN на metacpan.org (новее, с полнотекстовым индексом) и search.cpan.org.

Прочитайте документы для DBI, вы найдете переменную среды с именем DBI_TRACE, которая при установке будет печатать каждый оператор SQL в STDOUT. DBIx::Class имеет аналогичный DBIC_TRACE. Первый должен помочь вам увидеть, что делает метод развертывания.

Не требуется ли пароль для подключения к вашей базе данных?

person Alexander Hartmaier    schedule 01.09.2013
comment
нет, пароль не требуется, на данный момент он предназначен только для тестирования и игры с Perl и базами данных. спасибо за подсказку по DBIC_TRACE, скоро поищу и попробую. - person derflo; 01.09.2013
comment
у меня до сих пор не было времени поиграть с perl и базой данных :( я сообщу здесь, когда будет какой-то прогресс. в любом случае, спасибо за вопрос! - person derflo; 03.09.2013

Хорошо, сегодня я снова поиграл с perl и базой данных и выяснил, в чем была ошибка.

Прежде всего, я начал с DBI_TRACE и DBIC_TRACE, они выдавали много сообщений, но я ничего не мог обработать, мне казалось, что ничто не подсказывало мне проблему.

Затем я некоторое время искал в Google эту проблему и другие примеры метода развертывания. В какой-то момент я заметил, что моя структура папок неверна.

Файл Schema для таблицы должен быть помещен в

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

вместо того, чтобы помещаться в

../MyDatabase/Result/Album.pm

После перемещения файла схемы в нужную папку все заработало.

Позор мне за эту ошибку :( Но спасибо за вашу помощь

person derflo    schedule 10.09.2013
comment
Я пропустил это, вы даже написали это выше: Файл схемы для таблицы ../MyDatabase/Result/Album.pm package MyDatabase::Main::Result::Album; Вот как работают пространства имен в Perl: путь + имя файла должны соответствовать содержащемуся пакету. - person Alexander Hartmaier; 20.09.2013
comment
Я благодарен за эту подсказку, потому что у меня была такая же проблема. Может быть, какой-то туториал в сети неправильный, и начиная с этого материала, такой ошибки не видно. - person cslotty; 01.06.2015