スポンサーサイト

0

    一定期間更新がないため広告を表示しています


    • 2014.12.23 Tuesday
    • -
    • -
    • -
    • -
    • -
    • by スポンサードリンク

    phper.jpでSilexを使うための設定

    0
      silex.pharでなくcomposerで管理するようになった版のSilexで動くwebアプリを国産PaaSのphper.jpで動かすことに成功したので、設定などをメモを兼ねて書いておきたいと思います。

      phper.jpは面倒なサーバー構築不要でphp実行環境を使うことができる素敵なサービスですv

      アプリサーバーの設定

      ドキュメントルートはプロジェクトルート=ドキュメントルートの時は空文字列のままでOKのようです。

      アプリサーバー設定直後は503になるようです。もしアプリサーバーを設定してしばらく経っても503のままの時は、何も変更せず再度設定の保存をすると表示できるようになるというレポがありました。
      アプリサーバーを設定しても、設定保存し直してもずーっと503の時、エラーログにNo route to hostというエラーが出ていたら、何をやっても無駄なのでプロジェクトを作成し直したほうが良いです…。←私はこれで丸一日はまりました

      vendorライブラリのインストール(composer.phar install)をアプリサーバー側で実行させる

      通常、composerを使ったSilexのプロジェクトをどこかのサーバーにリリースする場合、サーバー側でcomposer.phar installを実行してvendorライブラリを入れますよね。しかし、phper.jpのアプリサーバーには、VPSや専用サーバーと違い自力でSSH接続をすることはできません。
      かといって、vendorライブラリを全部gitの管理下に置いてpush→デプロイはちょっと面倒です。(まぁ、ほかに手段が無ければやっても良いのですが)

      そこで、phper.jpのデプロイ時スクリプトを利用します。
      http://phper.jp/manual#deploy

      .phper/deployはデプロイごと(=pushごと)なのでcomposer.phar installの実行タイミングとしては多すぎる気もします。(「別に多すぎる気がしない」という方はそのまま.phper/deployに書いてよいと思います)
      私はrequireを足したとき、主要なライブラリがアップデートされたときに手動で実行したいと思ったので、少々用途が違う気もしつつ.phper/initdbに書きました。(後述するようにrsync_exclude.txtがうまく効かなかったので、結局deployに書き直したのですが)

      mod_rewriteを効かせる

      UrlGeneratorServiceProviderを使って生成される内部URLは基本的にmod_rewriteが前提ですね。(index.php付きでアクセスした場合は別ですが)
      つまり、UrlGeneratorServiceProviderを使う場合はmod_rewriteが必要になります。

      apacheの設定は.phper/httpd.confに書けば効きますと書いてあるのですが
      http://phper.jp/manual#deploy
      .phper/httpd.confにmod_rewrite設定を書いてpush→デプロイしてもmod_rewriteは有効になりませんでした。(先にアプリサーバー追加した状態で後からhttpd.confを足したからかも?)
      ダメもとでドキュメントルートに.htaccessを置いたところ正常に動作。
      RewriteEngine On
      RewriteBase /
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteRule ^ index.php [QSA,L]

      composerでインストールしたvendorライブラリがデプロイ時に消えないようにする

      push時のデプロイはrsyncが--deleteオプション付きで実行されるようなので、.phper/rsync_exclude.txtを置いてvendorライブラリ群を除外します。
      http://phper.jp/manual#deploy
      ※私の書き方が悪いのか公式のドキュメントが古いのか不明ですが、.phper/rsync_exclude.txtで除外したつもりのvendorライブラリがデプロイごとに削除されてしまうため、composer.phar installをデータベース初期化時スクリプトからデプロイ時スクリプトに書き直しました。

      proxy設定する

      proxyが動作するようなのでSilexの公式ドキュメントにある通り、proxyをtrustするようにSilex側の設定をします。
      http://silex.sensiolabs.org/doc/usage.html#bootstrap
      "If your application is hosted behind a reverse proxy and you want Silex to trust the X-Forwarded-For* headers, you will need to run your application like this:"
      Request::trustProxyData(); $app->run();


      Silexでエラーページをカスタマイズする方法 : Symfony Advent Calendar 2011 - day 12

      0

        Symfony Advent Calendar 201112日目です。

        昨日は@itemanさんでした。

         


         

        Silexのデフォルトのエラー画面は
        デフォルトエラーページ
        こんな感じです。

        ちゃんと他の画面と同じレイアウトの中に埋め込みたいと思いませんか?(ヘッダーとかフッターとかメニューとか)

        そんなときはエラー設定をします。
        エラー設定
        errorもget,postもreturnするのは同じですから、twigをrenderしたものを返せばエラー画面として表示することができるのです。errorでちょっと違うのは、レスポンスコードをつけるために生のボディ(twigをレンダリングしたhtml)だけでなくSymfony¥Component¥HttpFoundation¥Responseのインスタンスを返していることです。
        勝手にerror.twigをレンダリングするべしと書いてしまったので、error.twigも書きます。
        layout.twig
        error.twig
        最初の行でlayout.twigをextendsすればちゃんと反映されます。エラーページでもヘッダーがつくようになりました。
        カスタムエラーページ
        余談ですが¥Exception $e->getMessage()したものはデバッグメッセージ的なものなのでむやみやたらと見せない方が良いです。$app['debug']に設定してある場合のみ表示するようにしました。(twigテンプレート側から$appはappで参照できます)

         


         

        SymfonyのAdvent Calendarなのに、twitterで後藤さんにSilexはOKですよ〜と言ってもらったのでv お言葉に甘えてSilexネタでした。

         

        明日は@bakorer さんです。



        Silexの使いどころ(妄想)

        0
          最近Silexにハマってます。面白いです。
          で、真面目に仕事での使いどころを考えてみました。

          ・DBを使わない小規模なスクリプトの時
          一昔前?は無料CGIで済ませたような、ペラ1枚のスクリプトを楽に書きたいときは向いてる気がします。
          メールフォームとか、単純な○○占いとか。
          あと、RSSや何かを取ってきて加工して表示するようなのを書くのに良いかもしれません。

          ・既存アプリでDBを操作しているものの携帯版のみ作るとき
          具体的にはWordPressやMovableType等の携帯向け表示を作るのにいいかも?と思ってます。もちろんktai_styleプラグインやMTの携帯用テンプレート利用などはできるわけですが、それでは足りない時に使えるかもと思ってます。


          現時点ではORMがバンドルされているわけでなく、Doctrine2のORMを使えるようにするExtensionも非公式なので、SQLをガリガリ書いても後でメンテできるぐらいの規模用のフレームワークということなんですよね。
          読み出しはほとんど問題ないと思いますが、symfonyとかでバリバリやってるようなDBにUPDATE,INSERTをどんどんかけて行くようなアプリを書くのは厳しいと思います。

          個人的には、django.contrib.adminのようなExtensionなり再利用可能なappが出てくれば、独自CMS用のフレームワークとして一気に飛躍できる!と思っているのですが…^^;


          1

          PR

          calendar

          S M T W T F S
                1
          2345678
          9101112131415
          16171819202122
          23242526272829
          30      
          << April 2017 >>

          twitter

          selected entries

          categories

          archives

          recent comment

          • 結局CodeIgniter用汎用Modelクラス&汎用CRUDスクリプトを書きました
            プログラマー
          • icu4.4以上が用意できないサーバーでSymfony2.3以上を使う方法
            よし
          • icu4.4以上が用意できないサーバーでSymfony2.3以上を使う方法
            ななうぇぶ
          • icu4.4以上が用意できないサーバーでSymfony2.3以上を使う方法
            よし
          • icu4.4以上が用意できないサーバーでSymfony2.3以上を使う方法
            よし
          • WindowsのPCで開発するphperがxhprofを使う方法
            ななうぇぶ
          • WindowsのPCで開発するphperがxhprofを使う方法
            川本
          • [バッドノウハウ]Symfony2で別テーブルの集計項目を一覧に含めたいとき
            よし
          • Symfony Advent Calendar JP 2012 day 14 - vendorをcomposerで管理しているプロジェクトにcomposerを使わずにバンドルを追加したときのautoloadの書き方
            77web
          • Symfony Advent Calendar JP 2012 day 14 - vendorをcomposerで管理しているプロジェクトにcomposerを使わずにバンドルを追加したときのautoloadの書き方
            ktz

          recent trackback

          • HTMLの表(TABLE)のセル(TD)に斜線を引くjavascriptライブラリ slash.js 作っちゃいました
            常山日記
          • django対symfony 日本語メール送信(その1 symfony編)
            CPA-LABテクニカル
          • CodeIgniterでユーザー認証
            されどLAMPな日々
          • 久々にdjangoを最新版にしたらHTMLがエスケープされちゃった!!(解決済み)
            常山日記
          • FastCGIを諦めてmod_pythonを使う。Apacheのアップグレード
            サーバー用語集
          • さくらインターネット、sqlite3でdjango@CGI版を使う際の設定メモ
            常山日記
          • さくらインターネット スタンダードプランでdjango使ってる方、DBは?
            mitszoの日記
          • python多次元リストをsort(並べ替え)する方法?
            mitszoの日記
          • フォームから送信した値とrequest.POSTの挙動($_POST@PHPとの比較)
            Humming Via Kitchen
          • 日本語テキストをtruncate@django(Python全般にも??)
            常山日記

          recommend

          links

          profile

          search this site.

          others

          mobile

          qrcode

          powered

          無料ブログ作成サービス JUGEM