Hatena::Groupcatalyst

dann@catalyst このページをアンテナに追加 RSSフィード

2008-02-16

DB周りの設定とSchema作成の流れ

15:34 |  DB周りの設定とSchema作成の流れ - dann@catalyst を含むブックマーク はてなブックマーク -  DB周りの設定とSchema作成の流れ - dann@catalyst  DB周りの設定とSchema作成の流れ - dann@catalyst のブックマークコメント

config/deploy.rbでDBのパスワードの編集

MySQLの設定。DBの作成など。

% cap deploy:setup

schemaの編集

% vim config/sql/schema.sql

テーブルの作成

% cap deploy:create_table

Schemaの生成

script/hoge2_schema_dumper.pl 

schema.sqlを直したら、テーブルの作成からループ。

後はリリース後にDBのスキーマ変更とかしたい場合に、migrateするところをどう自動化するか。ここが決まれば手順としては大体いいかな。

Catalyst::Helper::Schema::DumperでYAMLからdsnなど取得

02:57 |  Catalyst::Helper::Schema::DumperでYAMLからdsnなど取得 - dann@catalyst を含むブックマーク はてなブックマーク -  Catalyst::Helper::Schema::DumperでYAMLからdsnなど取得 - dann@catalyst  Catalyst::Helper::Schema::DumperでYAMLからdsnなど取得 - dann@catalyst のブックマークコメント

myapp.ymlから、dsn, user, passwordを取得するようにした。helperにdsn, user, password渡さなくていいからhelperの使い方を覚えてなくてもいい。

--- Dumper.pm.orig      2008-02-17 02:17:10.000000000 +0900
+++ Dumper.pm   2008-02-17 02:22:06.000000000 +0900
@@ -47,7 +47,7 @@

     my @path = (split('::', $app), 'Schema');

-    $helper->render_file( 'script', $script, { path => \@path, arg => \@arg } );
+    $helper->render_file( 'script', $script, { path => \@path, appprefix => Catalyst::Utils::appprefix($app) } );
     chmod 0755, $script;
 }

@@ -75,6 +75,7 @@
 use strict;
 use warnings;

+use YAML;
 use FindBin;
 use File::Spec;
 use lib File::Spec->catfile( $FindBin::Bin, qw/.. schema lib/ );
@@ -82,10 +83,6 @@
 use Path::Class qw/file dir/;
 use DBIx::Class::Schema::Loader qw/make_schema_at/;

-my @arg = defined @ARGV ? @ARGV : qw([% arg.join(",") %]);
-
-die unless @arg;
-
 # do manual delete instead of really_erase_my_files option
 #    for keep MyApp/Schema.pm
 my $libdir = dir($FindBin::Bin, '..', 'lib', '[% path.join("', '") %]' );
@@ -93,13 +90,16 @@
     $libdir->rmtree;
 }

+my $config = YAML::LoadFile(File::Spec->catfile( $FindBin::Bin, '..', '[% appprefix %].yml'));
+my $db_config = $config->{'Model::DBIC'};
+
 make_schema_at(
-    '[% app %]::Schema',
+    $db_config->{schema_class},
     {   components => [ 'ResultSetManager', 'UTF8Columns' ],
         dump_directory => File::Spec->catfile( $FindBin::Bin, '..', 'lib' ),
         debug          => 1,
     },
-    \@arg,
+    $db_config->{'connect_info'},
 );

 1;

Perl::Critic

| 21:32 |  Perl::Critic - dann@catalyst を含むブックマーク はてなブックマーク -  Perl::Critic - dann@catalyst  Perl::Critic - dann@catalyst のブックマークコメント

catastarterに追加。殆どPlaggerのやつまんまだけれど。

=== test ===
---
file: 't/perlcriticrc'
template: |
  # for mkdir $dir, 0777
  [-ValuesAndExpressions::ProhibitLeadingZeros]

  [-BuiltinFunctions::ProhibitStringyEval]

  # no strict 'refs'
  [TestingAndDebugging::ProhibitNoStrict]
  allow = refs

---
file: 't/99perlcritic.t'
template: |
  use strict;
  use Test::More;

  eval { require Test::Perl::Critic; Test::Perl::Critic->import(-profile => "t/perlcriticrc") };
  plan skip_all => "Test::Perl::Critic is not installed." if $@;

  all_critic_ok("lib");

Shipwright

10:34 |  Shipwright - dann@catalyst を含むブックマーク はてなブックマーク -  Shipwright - dann@catalyst  Shipwright - dann@catalyst のブックマークコメント

これは、かなり使える気がする。cool!

http://search.cpan.org/~jesse/Shipwright-1.0/

  • CPANモジュールがバージョン管理できる。
  • モジュール間の依存関係、インストール順をyamlで管理することができる
  • モジュールのバージョンの更新が簡単にできる
  • cpanコマンドみたいに、何度もy押さなくていい!

といったことができるようになっている。

一回、CPANモジュールをバージョン管理下にいれてしまえば、後はどのサーバーでも同じバージョンのものが使えるようになるわけで、各サーバーでモジュールのバージョンが異なるなんてことは無くなりそう。

sudo shipwright create -r svk://mirror/acme-musume
sudo shipwright import -r svk://mirror/acme-musume Acme::MorningMusume

これでAcme::MorningMusumeに必要なものがバージョン管理下に。

以下でインストール。

sudo shipwright build -r svk://mirror/acme-musume

/tmp/* に必要なモジュール一式が生成される。インストールされる先は、--install-baseで指定できるようになっている。デフォルトは/tmp/*。forceを指定すればforce install.

多分、複数台のサーバーに同一のCPANモジュールをインストールするには、ディストリビューションのパッケージを作って、そのパッケージをバージョン管理する方法しかないような気がするのだけれど、その代替になりえそうだなぁという気がした。(複数台にデプロイだけであれば、ディスクイメージ丸ごとコピーして、そのディスクイメージだけ頑張って更新ってのもあるのかも。)

これで、アプリケーションのに必要なモジュールも、アプリケーション本体もバージョン管理できて、それらを一括でデプロイできるようになりそう。これは可能性を感じるなぁ。

そんなこんなで、Catalyst用のshipwright buildが作れるようにしておこうと思ったのでした。依存モジュールが多いCatalystは、cpanコマンドでインストールするの大変なんですよね。(Plaggerのも欲しい!)

ShelcyShelcy 2012/10/30 22:21 Thought it wuoldn't to give it a shot. I was right.

huhgqysvfohuhgqysvfo 2012/11/01 01:23 jAF3Eb <a href="http://sgebxcktvppi.com/">sgebxcktvppi</a>

rgukfswkrgukfswk 2012/11/01 06:34 syuiuf , [url=http://tcxhglztdxaa.com/]tcxhglztdxaa[/url], [link=http://vsssdqhlinam.com/]vsssdqhlinam[/link], http://wgthsyqwdlzk.com/

hbwepcntafahbwepcntafa 2012/11/01 13:10 QC20R0 <a href="http://sxlvgxikvans.com/">sxlvgxikvans</a>

ayaxcknayaxckn 2012/11/02 02:00 MCWowV , [url=http://lfxurgdvfssk.com/]lfxurgdvfssk[/url], [link=http://dfhlnklckjue.com/]dfhlnklckjue[/link], http://audqpmbmroqf.com/

ゲスト



トラックバック - http://catalyst.g.hatena.ne.jp/dann/20080216