somemo's diary

プログラマ、雑記、プログラミング関係はLinkから、数式はこっちでまとめていることが多い

【symfony】1.4をcloudControlに構築する【クラウド】

symfonyの環境構築は以前にも行いましたが、Windows環境では初めてなのでメモしておきます。

ローカルでのsymfony準備

symfonyプロジェクトを作成するディレクトリへ移動します

C:\>cd C:\work\programming\php\cloudControl\hellocc

symfonyのソースをSVNでチェックアウトするためのディレクトリ作成します

mkdir symfony14\lib\vendor

TortiseSVNで下記リポジトリからチェックアウトします。(ディレクトリ名はsymfony)

http://svn.symfony-project.com/branches/1.4

symfonyプロジェクトを作成します

C:\work\programming\php\cloudControl\hellocc\symfony14>php lib\vendor\symfony\data\bin\symfony generate:project .\

database.yml(DB:cloudControlのmysql)の設定します。

cctrlapp アプリ名/default addon mysql.free #下記に記載する情報忘れた場合に実行して確認
C:\work\programming\php\cloudControl\hellocc\symfony14>php symfony configure:database "mysql:host=127.0.0.1;dbname=デプロイID" デプロイID パスワード

完成後のyml(上記コマンドでなく、直接編集しても問題なさそうです。)

# You can find more information about this file on the symfony website:
# http://www.symfony-project.org/reference/1_4/en/07-Databases

all:
  doctrine:
    class: sfDoctrineDatabase
    param:
#      dsn:      mysql:host=localhost;dbname=.\
      dsn:      mysql:host=127.0.0.1;dbname=デプロイID
#      username: root
      username: デプロイID
      password: パスワード

フロントエンドのアプリを作成します

C:\work\programming\php\cloudControl\hellocc\symfony14>php symfony generate:app frontend

lib\vendor\symfony\data\web\sfディレクトリを、webディレクトリにコピーします。Windowsにはシンボリックリンクがないためこのような対処をしています。ただし、Vista以降ではシンボリックリンクを作成できるようです。(トラブルシューティング | symfony 1.4によるWebアプリケーション開発 サポートサイト(Windows環境でのsfディレクトリのシンボリックリンク))

最後にinit、add、commit、push、deploy

git init #svn系ファイルが消えます
git add .
git commit -m "メッセージ"
cctrlapp アプリ名/default push
cctrlapp アプリ名 deploy

htpp://アプリ名.cloudcontrolled.com/symfony14/webにアクセスしましたが、真っ白画面の500エラーレスポンスでした・・・

理由は、gitでcacheとlogディレクトリをのcommitしていなかったからです。gitでは、空ディレクトリをcommitできないようです。

解決法としては、空の.gitignoreファイルをそれぞれのディレクトリに格納し、それぞれのディレクトリに作成されるキャッシュとログをgitで管理しないように、ルートディレクトリに下記の.gitignoreファイルを作成しました。

#Eclipse用ファイルも書きました。
/symfony14/.project
/symfony14/.buildpath
/symfony14/.settings

/symfony14/.log/*
/symfony14/.cache/*

Helloモジュールとその中身

// action
  public function executeIndex(sfWebRequest $request)
  {
    ;//$this->forward('default', 'module');
  }

  public function executeWorld(sfWebRequest $request)
  {
    ;
  }

// IndexSuccess.php
Hello Index <?php echo date('Y/m/d') ?>
// WorldSuccess.php
Hello World <?php echo date('Y/m/d') ?>

URLパターンとその結果(〇以外は正常でありません。)

symfony14/web symfony14/web/frontend_dev.php
/なし /ありにリダイレクト -
/あり -
index.php
または
frontend_dev.php
index.php/
または
frontend_dev.php/
index.php//sf/sf_default/css/screen.css frontend_dev.php//sf/sf_default/css/screen.css
/Hello 500エラー frontend_dev.php/Hello/css/main.css
/Hello/ 404エラー frontend_dev.php/Hello//css/main.css
/Hello/World frontend_dev.php/Hello/World/css/main.css
/Hello/World/ frontend_dev.php/Hello/World//css/main.css

自分の設定がおかしいと思うのですが、下記のような問題があると感じます。

  • frontend_dev系の結果を見ると、ルーティングがおかしい?と感じます。(webを指定していない)
  • /を余計に付加しているものは、apps/routing.ymlにはない規則なので問題ありません。
  • /Helloの500エラーより、executeIndexが見つかっていない気がする

ドキュメントルートに関する設定

  • .ccconfig.yaml ⇒ BaseConfig:  WebContent: /
  • .htaccess ⇒ RewriteBase /symfony14/web/

その他まとめ

  • deployされたファイルのパーミッションは551となる
  • 上記のため、cacheおよびlogディレクトリへの書き込みができないので、権限を変更するスクリプトを作成する必要がある
  • 自分は、0777に変更するスクリプトを作成しました。しかし、変更はされるのですが、551と777を行き来することがあり動作が不安定・・・
  • SFTPの設定を確認できるが、実際に行えるのかがわからない(cctrlapp デプロイID/default details)
  • ここで開発するのは面倒くさすぎる
  • あくまで、他人に自分の作成したものを見てもらうために利用するのが1番だと感じる

cloudControlは見送りっぽいです。localで開発がんばります。