S3にAPIからアップロードするとリダイレクトされるときの対処法
失敗時の内容
$credentials = array( "key" => "your_key", "secret" => "your_secret" ); $s3 = new AmazonS3($credentials); $response = $s3->create_object($bucket, $fileName, array( "fileUpload" => $filePath, "acl" => AmazonS3::ACL_PUBLIC, "contentType" => $contentType ));
上記のような感じでアップロードを試みたときうまくいかなかったのでvar_dump($responseで確かめたところ)以下のような出力されて、どうやら正しいエンドポイントをセットしてあげてみたいなことを言われているっぽい。
["body"]=> object(CFSimpleXML)#17 (6) { ["Code"]=> string(17) "PermanentRedirect" ["Message"]=> string(137) "The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint." ["RequestId"]=> string(16) "xxxxxxxx" ["Bucket"]=> string(23) "xxx.xxx.xxx.com" ["HostId"]=> string(64) "xxxxx" ["Endpoint"]=> string(40) "xxx.xxx.xxx.com.s3.amazonaws.com" } ["status"]=> int(301)
解決方法
以下のように東京リージョンならap-northeast-1なので、以下のようにセットしたらちゃんとアップロードできるようになった。
$s3->set_region(AmazonS3::REGION_APAC_NE1);
参考URL
Silex(phpunit, doctrine/orm)のテンプレートを作った
githubにアップした
github上に表題の通りSilexのテンプレートをアップした。
composerを使って依存関係を管理
composer.jsonにプロジェクトで使うライブラリなどを記述する。
今回は何かしらサービスを作る際のAPI実装で最低限あったら便利と思われるものをcomser.jsonに記述した。
composerを使ってインストールするものは以下の通り。
このテンプレートの使い方はgithubにアップしたREADME.mdに書いたのでここでは割愛。
ライブラリの依存関係の管理の他にも、ライブラリをダウンロードするときのレポジトリの指定や、クラスの自動ロードなど、composerはphp開発の際にすごく便利なのでphpで開発していてcomposerを知らない人は一回composerを使ってみると良いと思う。
Doctrine ORM コマンド メモ
追記(2013/1/26)
#composer.json { "require": { "phpunit/phpunit": "3.7.*", "doctrine/orm": "*" } }
上記のcomposer.jsonを用意して「./composer.phar install」を実行してvendorディレクトリがつくられるとき、vendorディレクトリの中にbinディレクトリがあって、composerでインストールしたもので、コマンドから実行する系のものはbinディレクトリに入っている。
以下は上記の「composer.json」を「./composer install」したとき、vendor/binディレクトリに作られるファイル一覧
#/path/to/vendor (include 「bin」directory) $ tree bin/ bin/ ├── doctrine -> ../doctrine/orm/bin/doctrine ├── doctrine.php -> ../doctrine/orm/bin/doctrine.php └── phpunit -> ../phpunit/phpunit/composer/bin/phpunit
前回このページの「25.1.3. Configuration (Non-PEAR)」からdoctrineコマンドを実行させるためのphpファイルをつくっていたがわざわざそんな事しなくても良かったみたい。
前準備
今回composerを使ってインストールしているからこのページの「25.1.3. Configuration (Non-PEAR)」を見てdoctrineのコマンドを使えるようにする
基本的にわからなくなったらhelp
以下のように「doctrine」コマンド(ここではphp doctrine.php)とorm:○○の間にhelpを入れればorm:○○の使い方の詳細が見れるからとりあえずまずはhelpを使って使い方を確認。
php doctrine.php help orm:generate-entities
既にあるDBからORMの設定ファイル(yaml形式)と関連するエンティティ(各DBのオブジェクト)クラスを生成
php doctrine.php orm:convert-mapping --namespace="Entities\" --from-database yml /path/to/config_yaml_dir
php doctrine.php orm:generate-entities /path/to/entitities_dir
php doctrine.php orm:validate-schema
気になったところ
- TinyIntはbooleanとして認識されるっぽい
- しかも2以上いれても全て1になる(0か1だけしか値が入らないようにマッピングされている?)
- フィールドに
read
が入っているとバグが発生する(readが原因じゃないかもしれないが、read_flag
とフィールド名を変更したところ直った)
指定できる型一覧
- string: Type that maps an SQL VARCHAR to a PHP string.
- integer: Type that maps an SQL INT to a PHP integer.
- smallint: Type that maps a database SMALLINT to a PHP integer.
- bigint: Type that maps a database BIGINT to a PHP string.
- boolean: Type that maps an SQL boolean to a PHP boolean.
- decimal: Type that maps an SQL DECIMAL to a PHP string.
- date: Type that maps an SQL DATETIME to a PHP DateTime object.
- time: Type that maps an SQL TIME to a PHP DateTime object.
- datetime: Type that maps an SQL DATETIME/TIMESTAMP to a PHP DateTime object.
- text: Type that maps an SQL CLOB to a PHP string.
- object: Type that maps a SQL CLOB to a PHP object using serialize() and unserialize()
- array: Type that maps a SQL CLOB to a PHP array using serialize() and unserialize()
- float: Type that maps a SQL Float (Double Precision) to a PHP double. IMPORTANT: Works only with locale settings that use decimal points as separator.
http://docs.doctrine-project.org/en/latest/reference/basic-mapping.html
参考URL
- http://stackoverflow.com/questions/7356507/autoload-issue-in-using-doctrine2
- http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/tools.html
- http://docs.doctrine-project.org/projects/doctrine-orm/en/2.0.x/reference/tools.html#reverse-engineering
- http://stackoverflow.com/questions/13670471/database-fail-the-database-schema-is-not-in-sync-with-the-current-mapping-file
VirtualBoxでRAID 10な環境を構築する(CentOS6.3)
はじめに
RAIDについて触れる機会が出来て、今まで構築したことがなかったので一度構築して感覚をつかもうと思い、ハードウェアをそろえるのも大変だったので、VirtualBoxで構築してみた。
参考にしたページ
- http://2626.info/install-virtualbox/
- http://2626.info/install-centos/
- http://konishi.me/?p=134
- http://www.youtube.com/watch?v=zlOK1voR2nA
- http://www.youtube.com/watch?v=rn036t6gDi4
VirtualBoxで手を加えたところ
システム
ストレージ
IDEコントローラ
- 上記の「参考にしたページ」を参考にダウンロードしたネットワークインストール用のCentOSのisoファイルをセット
SATAコントローラ
- 仮想ハードディスクを4つセットする(RAID 10を作る用)
IDEコントローラはCentOSのインストールが終わったらリストから外しておく。 (そうでないとインストールしたあともインストール画面が開く。それかシステムタブの起動順序をCD/DVD-ROMを最後に読み込むように変更するのでも大丈夫だと思う。)
ネットワーク
- アダプタ2
- ネットワーク経由でインストールをするためネットワークを読み込めなくてはいけないので追加
- 今回はWi-fiを選択したが、LANケーブルでインターネット接続している場合はEthernetを選択すれば良いと思う
CentOSネットインストール、 RAID設定
CentOSネットインストール、 RAID設定の方法に関しては、上記の「参考にしたページ」の最後に2つのyoutubeのURLを見たほうが、動画で説明されている分、そちらの方が分かりやすいと思うので動画を参考にした方が早いと思うのでここでは割愛。以下にもう一度先程のyoutubeのURLを貼っておく。
まとめ
実際にはハードウェアでRAID構築をする予定なので、実際に自分がやるのとは違うかもしれないが、実際にRAIDを構築してみてHDDのパーティションの分け方とか、どういう構成でHDDを用意すれば良いとかが学べたので実践の場で学んだことを活かせられたらなと思う。
Elastic Beanstalkの流れ(コマンドラインから実行)
メモ
- eb init
- eb start
- CloudFormationが作られる
- CloudFormationのテンプレートに記述されている内容が実行される
- ファイル作成
- パッケージインストール
- リソース(EC2, S3など)の割り当て
- 起動時に実行されるデーモンの起動
- 必要があればEC2インスタンス立ち上げの時に実行させるUserDataを記述