CPANPLUS
Hatena::Diary::Neko::kak 500 Internal Server Error - Plaggerはいらない!
CPANPLUS.pmで入れようとしたら設定がまずいのか
タイムアウトしたりなんだかんだで入らない!!
これ多分設定悪いんじゃねーかなぁ。一番最初に試したときになんかそうなってぜんぜんうまくうごかねーCPANPLUSうんこ!とかなった記憶。
とりあえず最近新しいPCにCPANPLUS入れたのでそのときの作業を思い出しつつ書いておいて見る。
$ sudo cpan
cpan> install Bundle::CPANPLUS
- ここではてけとうに設定
- cpan シェル終了
$ chown -R typester:typester ~/.cpanplus
$ export PERL5_CPANPLUS_CONFIG=$HOME/.cpanplus/config
とrcスクリプトにそれ追加$ cpanp
CPAN Terminal> s reconfigure
で再設定。ここでちゃんと設定する
設定時の注意は設定ファイルを ~/.cpanplus/config
になるようにするのとインストール時に sudo を使うようにするくらい。
あと Storeble を有効にすると環境によってはすげー遅くなる場合があるかもしれないのでその場合は切る。
Plagger::Plugin::Store::DBIC #2
DB Schema 外部におく必要ねーよなー、よく考えたらw
DBIx::Class::Schema のメリットは Plugin::Store::DBIC::Schema::SQLite とかで作って、それを外部から普通に使えるっていうことで、反対だよ。
Plagger::Plugin::Store::DBIC
作ってみたけどびみょーー。Schema をこっちの指定通りに作ってないとだめなんだよな。せっかく外部におけるのに。
package Plagger::Plugin::Store::DBIC;
use strict;
use warnings;
use base qw/Plagger::Plugin Class::Accessor::Fast/;
use UNIVERSAL::require;
our $VERSION = '0.01';
__PACKAGE__->mk_accessors(qw/schema/);
sub register {
my ( $self, $c ) = @_;
unless ( $self->conf->{schema_class} and $self->conf->{connect_info} ) {
$c->error('schema_class and connect_info are required');
}
$self->conf->{schema_class}->require
or $c->error(
qq/Can't load schema class "@{[ $self->conf->{schema_class} ]}", $!/);
$self->schema( $self->conf->{schema_class}
->connect( @{ $self->conf->{connect_info} } ) );
$c->register_hook( $self, 'publish.feed' => \&store, );
}
sub store {
my ( $self, $c, $args ) = @_;
# feed
my $feed = $self->schema->resultset('Feed')
->find_or_new(
{ link => $args->{feed}->link, type => $args->{feed}->type } );
$feed->$_( $args->{feed}->$_ )
for (qw/url image description language author updated/);
$feed->insert_or_update;
# feed meta
$feed->meta->delete_all;
for my $k ( keys %{ $args->{feed}->meta } ) {
$feed->add_to_meta( { key => $k, value => $args->{feed}->meta->{$k}, } );
}
# entry
for my $feed_entry ( @{ $args->{feed}->entries } ) {
my $entry = $self->schema->resultset('Entry')->find_or_new(
{ feed => $feed->id,
link => $feed_entry->link,
}
);
$entry->$_( $feed_entry->$_ )
for qw/title author date summary body rate icon/;
$entry->insert_or_update;
# meta
$entry->meta->delete_all;
for my $k ( keys %{ $feed_entry->meta } ) {
$entry->add_to_meta( { key => $k, value => $feed_entry->meta->{$k}, } );
}
# tag
$entry->tag_mappings->delete_all;
for my $entry_tag ( @{ $feed_entry->tags } ) {
my $tag = $self->schema->resultset('Tag')
->find_or_create( { name => $entry_tag } );
$entry->add_to_tag_mappings(
{ entry => $entry->id, tag => $tag->id } );
}
}
}
1;
config.yaml は
- module: Store::DBIC
config:
schema_class: 'Plaggerer::Schema'
connect_info: [ 'dbi:SQLite:/home/murase/plaggerer/db/plaggerer.db' ]
Schema ファイルを置く場所もまた問題。
この場合はPlugin指定のSchemaしか扱えないから普通にこのプラグイン以下に置けばいいのかも知れんけどなぁ。