Slim2+EloquentORM4で簡単APIスタブ

を作った

composer.json

{
    "require": {
        "slim/slim": "~2.0",
        "illuminate/database": "~4.0"
    }
}
$ composer install

して準備完了
ファイル構成は以下の様な感じ

  • app/
    • models/
      • hoge.php  //モデルクラス
  • templates/
    • hoge.phtml  //view(必要に応じて)
  • vendor/      //composer installしたやつ
  • composer.json
  • composer.lock
  • index.php

モデルクラスは殆ど書かなくていいけど

<?php
use Illuminate\Database\Eloquent\Model as Eloquent;
class Hoge extends Eloquent {
    protected $table = 'table_name';
}

こんな感じ

index.phpの中で諸々やっちゃう

<?php
require 'vendor/autoload.php';
require 'app/models/hoge.php';
use Illuminate\Database\Capsule\Manager as DatabaseManager;

$app = new \Slim\Slim();
$app->db = new DatabaseManager;
$app->db->addConnection([
            'driver'    => 'mysql',
            'host'      => 'localhost',
            'database'  => 'hoge',
            'username'  => 'hoge',
            'password'  => '',
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
        ]);
$app->db->setAsGlobal();
$app->db->connection();
$app->db->bootEloquent();

$app->get("/", function() use ($app) {
    $hoge = Hoge::find(1);
    //一番最後に更新されたレコードだけほしい時は下記のような感じ
    //$hoge = $app->db->table('table_name')->orderBy('updated_at', 'desc')->take(1)->get();
    $app->response->headers->set('Content-Type', 'application/json');
    $app->response->setBody(json_encode($hoge));
});

$app->run();

という感じで
Eloquentの方のバージョン指定せずに入れると5が入るんで注意
5だと日本語の資料あんまりなくて調べるの面倒だったのでおとなしく4系を使いました

sinatra + activerecordに比べると面倒だけどpassenger入れるよりは簡単なのでおすすめ

Android2系でWebViewのcookieが消える

仕事で 一旦cookieを全消ししてから必要なものだけ詰めなおす という処理を書いていて 4系だと期待した動作をするんだけど2系の時だけcookieが空になるという事象が起きました。

CookieManagerのsetCookieは非同期で処理されるので、

全消し

Cookieを書き込むキューに必要なcookie情報を書き込む

Cookieチェック

_人人人人人人人_
> cookieが空 <
 ̄YYYYYY

という事態になってたみたいです。

たぶん これです。

4.1以降では修正されているらしいけど2系での対応が出来ないみたいなので、
UIスレッドをブロッキングしてでもcookie書き込むオプションがほしかったですね。

bundle updateしたらエラーがでた

    $ bundle update
        /Users/hoge/.rbenv/versions/2.1.1/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in `require': dlopen(/Users/hoge/.rbenv/versions/2.1.1/lib/ruby/2.1.0/x86_64-darwin13.0/openssl.bundle, 9): Symbol not found: _SSLv2_client_method (LoadError)
      Referenced from: /Users/hoge/.rbenv/versions/2.1.1/lib/ruby/2.1.0/x86_64-darwin13.0/openssl.bundle
      Expected in: /usr/local/opt/openssl/lib/libssl.1.0.0.dylib
    in /Users/hoge/.rbenv/versions/2.1.1/lib/ruby/2.1.0/x86_64-darwin13.0/openssl.bundle - /Users/hoge/.rbenv/versions/2.1.1/lib/ruby/2.1.0/x86_64-darwin13.0/openssl.bundle
      from /Users/hoge/.rbenv/versions/2.1.1/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in `require'
      from /Users/hoge/.rbenv/versions/2.1.1/lib/ruby/2.1.0/openssl.rb:17:in `<top (required)>'
      from /Users/hoge/.rbenv/versions/2.1.1/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in `require'
      from /Users/hoge/.rbenv/versions/2.1.1/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in `require'
      from /Users/hoge/.rbenv/versions/2.1.1/lib/ruby/site_ruby/2.1.0/rubygems/security.rb:11:in `<top (required)>'
      from /Users/hoge/.rbenv/versions/2.1.1/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in `require'
      from /Users/hoge/.rbenv/versions/2.1.1/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in `require'
      from /Users/hoge/.rbenv/versions/2.1.1/lib/ruby/site_ruby/2.1.0/rubygems/package.rb:43:in `<top (required)>'
      from /Users/hoge/.rbenv/versions/2.1.1/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in `require'
      from /Users/hoge/.rbenv/versions/2.1.1/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in `require'
      from /Users/hoge/.rbenv/versions/2.1.1/lib/ruby/site_ruby/2.1.0/rubygems/dependency_installer.rb:3:in `<top (required)>'
      from /Users/hoge/.rbenv/versions/2.1.1/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in `require'
      from /Users/hoge/.rbenv/versions/2.1.1/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in `require'
      from /Users/hoge/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/bundler-1.7.2/lib/bundler/installer.rb:2:in `<top (required)>'
      from /Users/hoge/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/bundler-1.7.2/lib/bundler/cli/update.rb:51:in `run'
      from /Users/hoge/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/bundler-1.7.2/lib/bundler/cli.rb:167:in `update'
      from /Users/hoge/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/bundler-1.7.2/lib/bundler/vendor/thor/command.rb:27:in `run'
      from /Users/hoge/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/bundler-1.7.2/lib/bundler/vendor/thor/invocation.rb:121:in `invoke_command'
      from /Users/hoge/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/bundler-1.7.2/lib/bundler/vendor/thor.rb:363:in `dispatch'
      from /Users/hoge/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/bundler-1.7.2/lib/bundler/vendor/thor/base.rb:440:in `start'
      from /Users/hoge/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/bundler-1.7.2/lib/bundler/cli.rb:9:in `start'
      from /Users/hoge/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/bundler-1.7.2/bin/bundle:20:in `block in <top (required)>'
      from /Users/hoge/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/bundler-1.7.2/lib/bundler/friendly_errors.rb:5:in `with_friendly_errors'
      from /Users/hoge/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/bundler-1.7.2/bin/bundle:18:in `<top (required)>'
      from /Users/hoge/.rbenv/versions/2.1.1/bin/bundle:23:in `load'
      from /Users/hoge/.rbenv/versions/2.1.1/bin/bundle:23:in `<main>'

こういった感じのエラーが出た
rbenvが古いのかなって思ったけどbrew upgradeできないのでインターネットで調べたらrubyのversionを2.1.2にしろってことらしい
早速やってみる

$ rbenv install 2.1.2
$ rbenv global 2.1.2
$ gem install bundler

これでいつもどおりbundle update出来るようになった