| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: разработка для Web > Mojo & SQLite |
| Автор: Marlik 21.5.2015, 17:16 |
| Здравствуйте люди. Пытаюсь скрестить Mojo и SQLite, делаю так: Создаю базу, образец отсюда - http://pragmaticperl.com/issues/06/pragmaticperl-06-dbixclass-%D0%B2-%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D0%B0%D1%85.html sqlite3 blog.db < blog.sql Создаю схему: dbicdump -o dump_directory=./lib -o components='["InflateColumn::DateTime"]' Schema dbi:SQLite:./dump/blog.db Проверил, всё физически имеется и база и схема. В MyApp: use Schema; has schema => sub { return Schema->connect('dbi:SQLite:' . ($ENV{BLOG_DB} || './dump/blog.db')); }; В startup: $self->helper(db => sub { $self->app->schema }); Пытаюсь инсёртить в базу из контроллера: my $self = shift; my ($title, $body, $tags) = @{$self->req->params->to_hash}{ 'title', 'body', 'tags' }; my $result = $self->db->resultset('Post')->create({ title => '$title', post => '$body', tags => '$tags' }); Получаю ошибку что таблицы posts нету. Но она присутствует! DBIx::Class::Storage::DBI::_prepare_sth(): DBI Exception: DBD::SQLite: no such table: posts [for Statement "INSERT INTO posts ( post, tags, title) VALUES ( ?, ?, ? )"] at /var/www/myapp/script/../lib/MyApp/Controller/Blog.pm line 23 Подскажите куда двигаться? Спасибо. |
| Автор: tzirechnoy 21.5.2015, 20:19 | ||
Почему Вы так думаете? |
| Автор: Marlik 21.5.2015, 20:44 | ||||
Потому что есть дамп blog.sql, вот он: CREATE TABLE authors ( authorid INTEGER PRIMARY KEY AUTOINCREMENT, author VARCHAR(255) UNIQUE, pass VARCHAR(255), type INTEGER ); CREATE TABLE posts ( postid INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT, post TEXT, tags TEXT, postime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, authorid REFERENCES authors(authorid) ); CREATE TABLE comments ( commentid INTEGER PRIMARY KEY AUTOINCREMENT, comment TEXT, comtime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, authorid REFERENCES authors(authorid), postid REFERENCES posts(postid) ); Потом командой sqlite3 blog.db < blog.sql создаю базу, я её вижу, могу открыть и посмотреть... как-то так. Спасибо. |
| Автор: noize 22.5.2015, 18:05 |
| Напишите структуру вашего проекта, где лежит файл .db, где лежат перловые модули. Работать с относительными директориями - плохая практика, не факт, что у моджо где-то внутри не вызывается команда chdir |
| Автор: Marlik 22.5.2015, 22:21 |
| Структура моджо стандартная, где лежит дамп и куда поставилась Shema видно выше в посте. |
| Автор: noize 23.5.2015, 12:46 | ||||
если папка dump лежит в корневой директории моджо-проекта, т.е. на одном уровне с папками lib, public, template и т.д., то абсолютный путь к файлу .db можно получить вот так:
и уже дальше использовать его в подключении к бд:
|
| Автор: Marlik 24.5.2015, 12:02 |
| Фишка вся в том, что, когда я меняю путь к базе, выскакивает ошибка, что мол базы нет. Открывал вручную базу в sqlite3 нормально видит базу, показывает структуру. Попробую ещё раз с нуля. И да, у вас ошибка. |
| Автор: Marlik 25.5.2015, 12:35 |
| Проблема из-за того что я всё делал из под рута. Век живи, век учись. |