いけむランド

はてダからやってきました

EB CLI 3.x を触ってみた

以前 qiita で公開していた記事を引っ越してきたものです。最終更新からかなり経っているため、情報の正確性は落ちている可能性があります。

はじめに

EB CLI の勉強をためにいろいろググってたら、いつの間にか EB CLI 3.x があることに気づいたので、ちょっと触ってみました。

日本語の資料がまだあんまりないっぽいためにさっくりと書いた mac での作業メモです。

ちなみに ubuntu でもだいたい一緒でした。

インストール

docs.aws.amazon.com

brewでインストールされるのは 2.x 系列のようです。

$ brew install aws-elasticbeanstalk

3.x 系列を入れるには pip を使うようです。

$ brew install python
$ pip install awsebcli
$ eb --version
EB CLI 3.0.10 (Python 2.7.9)

セットアップ

docs.aws.amazon.com

2.x と同じような感じです。

2.x との違い

あんまり 2.x を使いつくしてないため、それ違うんじゃね?というのもありそうですが、さっくり列挙。

config

2.x だと .elasticbeanstalk/config をいじって eb update していましたが、3.x だと eb config で EDITOR が起動して yaml をいじるようになったようです。

そして 3.x の方は .elasticbeanstalk/config に環境の情報が残らないっぽいように見えます。

deploy

2.x だと git aws.push していましたが、3.x だと eb deploy でするみたいです。

git aws.push は aws の git の end point に push 後にそちらで s3 に zip 化しておくみたいな挙動に見えましたが、eb deploygit archive するようなメッセージが出ていました。

おわりに

そもそも同一アプリ内の複数の環境の設定を全部 .elasticbeanstalk/config に置けないっぽくて、3.x 系列ならできるのかな?と思って調べてましたが、やっぱりできないようですね。

Connection を切り替えて Relation の loading をしたかった時の話

以前 qiita で公開していた記事を引っ越してきたものです。最終更新からかなり経っているため、情報の正確性は落ちている可能性があります。

はじめに

そろそろ laravel 歴 1 年になりそうながら、まだまだ使いこなせていない @fd0 です。

今回は database 周りのとある処理で 2~3 日悩んだ時のことを書いてみたいと思います。

コードを追いきれていないため、もしかしたら、もっと簡単に解決する方法 or そもそもやり方が良くないかもしれませんので、その場合はコメントなどでツッコミをいただければと思います。

やりたかったこと

やりたかったことは単純に「とあるアクション内で slave に繋ぎたかった」だけなのですが、どうも Eloquent 経由で思ったとおりにいってくれませんでした。

最初は以下のようなコードを Controller で書いていました。

// default は master
$model
  ->setConnection('slave')
  ->where('foo', $value)
  ->with(['bar' => function ($q) { $q->where('baz'); } ])
  ->get();

ところがこれですと $model は slave を参照しますが、bar は master を参照してしまいました。

¥Illuminate¥Database¥Eloquent¥Model あたりを読んでみても、Relation に $this を渡してるように見えるため、何故動いてくれないのかさっぱりでした。

with ではなくて load かなと思っていろいろ試行錯誤してみましたが、やはり slave を参照してくれません。var_dump すると connection は slave になっているため、既に作成されている master の connection を使っているのかなと思いましたが、よくわかりません。

Eloquent を諦めて DB::connection('slave') で解決しようかと思ったのですが、そうなると取得結果を Illuminate¥Database¥Eloquent¥Collection として処理している部分を書き換えないといけないため、それはそれで面倒だなあと思ってしまいました。

そうやって 2~3 日過ぎていった後にようやくできるようになりました。

やってみたこと

とあるアクションの route だけ database の設定を config で上書きすることでやりたいことを実現することができました。

// filter.php
Route::filter('db.slave', function()
{
  Config::set('database.default', 'slave');
});
// route.php
Route::group(['before' => 'db.slave'], function()
{
  Route::get('/', 'HogeController@actionGununu');
});

slave を参照しているかどうかは DB::connection('slave')->getQueryLog() で確認しました。

おわりに

同じことで困ってる人はいないのかとググッてみても全然見つからなかったので、まとめてみましたが、もしかしたら誰も困ってないのかもしれません...。(;^ω^)

あと、issues に関係ありそうな感じの Request がありましたが close されてました。

github.com

archey-cygwin を書いてみた

Archey という簡単なシステムの情報とディストリビューションのロゴを表示するユーティリティがある。


これは python で書かれているのだが、homebrew からだと別の人が書いた osx 向けの簡易版がインストールされる。


これを参考に cygwin 版を書いてみた。



実行すると以下のようになる。


f:id:fd0:20140412200854p:plain


ちなみに screenfetch というプログラムもある。こちらは一応 cygwin も対応しているように見えた。


実際に cygwin で動かしてみると、windows のコマンドを使うのを前提にしているらしき warning がちょこちょこ出た。


f:id:fd0:20140412201118p:plain


そもそもロゴが windows になるのが解せなかったのが、今回 archey を書いた理由でもあったりする。

あと、すごいどうでもいいことを言うと、cygwin のアイコンの AA は /etc/motd にあるものを JavE - Java Ascii Versatile Editor で縮小した。AA エディタによる編集の方がコードよりも時間がかかったかもしれない。

やましろさんといけむらさん #ymsr

家庭の事情で送別会には参加できなかったこともあるので、みんな以上にいっぱい想いを書きたいが、自分が知ってるのってどこまでなんだろう?もしかして全然知らないんじゃないかって不安になりながらも書いてみることにする。

  • 完全に思い出話なので、知ってる人だけ知っといてもらえれば良いかと思います。
  • もっと書くことべきことをあとから思い出すかもしれないので、その時には追記します。
続きを読む

「コーディングを支える技術」読了

誕生日プレゼントでいただいたのをようやく読み終えた。

継承の章あたりは微妙に自分の中でモヤモヤしてたところがすっきりして良かったです。

tractorgen

トラクターの AA が表示される Tractorgen というプログラムがあるが、どういう層に需要があるのかはわからない。

% tractorgen 
         r-------
        _|
       / |_______\_    \\
      |          |o|----\\
      |_____________\_--_\\
     (O)_O_O_O_O_O_(O)    \\
% tractorgen 10
         r-------------
        _|
       / |_____________\_    \\
      |                |o|----\\
      |___________________\_--_\\
     (O)_O_O_O_O_O_O_O_O_(O)    \\
% tractorgen 4 
         r-
        _|
       / |_\_    \\
      |    |o|----\\
      |_______\_--_\\
     (O)_O_O_(O)    \\
% tractorgen 3
tractorgen: ERROR!! Tractors must have at least four wheels!! FOOL!
[1]    1818 abort      tractorgen 3