Slim2+EloquentORM4で簡単APIスタブ
を作った
composer.json
{ "require": { "slim/slim": "~2.0", "illuminate/database": "~4.0" } }
$ composer install
して準備完了
ファイル構成は以下の様な感じ
- app/
- 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出来るようになった