スポンサーサイト

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();


      OpenPNE3カスタマイズテクニック:no_image画像のカスタマイズ

      0
        コミュニティのno_image画像はユーザーのno_image画像とは違うのを表示したい、という場合のカスタマイズ方法について。

        公式SNSの下記トピックでは、javascriptを使っててっとり早く変更する方法を紹介しちゃいましたが、この記事では真面目に確実に(javascriptが使えない環境も考慮。たとえばガラケーとか)変更する方法を考えてみたいと思います。
        ■no_imageの画像と通知センターの画像変更について(閲覧には公式SNSのアカウントが必要)
        http://sns.openpne.jp/communityTopic/8895

        前提:op_image_tag_sf_imageヘルパーのno_imageオプション

        op_image_tag_sf_imageヘルパーとは、PNE内の各所で、スキンプラグインやコアに含まれないアップロードされた画像のimgタグを出力するために使われているヘルパーです。
        ソース(lib/helper/opUtilHelper.php)を見るとわかる通り、image_tag_sf_imageヘルパーのラッパーで、no_imageというオプションが無い場合にデフォルト値をセットしているだけです。
        つまり、このno_imageオプションを個別に指定して呼び出してやることで、no_image画像を指定できることがわかります。
        (本当にno_imageオプションでno_image画像が指定できるのかどうか?や、大元のimage_tag_sf_imageヘルパーのその他の各オプションについては、lib/plugins/sfImageHandlerPlugin/lib/helper/sfImageHelper.phpを見てください。)

        コミュニティTOPのno_image画像を任意の画像に変える

        コミュニティTOPのテンプレートはapps/pc_frontend/modules/community/homeSuccess.php
        しかし、そこからop_include_parts()ヘルパでmemberImageBoxというパーツの呼び出しが行われているので、実際はapps/pc_frontend/templates/_partsMemberImageBox.phpになります。
        <?php $imgParam = array('size' => '180x180', 'alt' => $options->object->getName()) ?>
        <?php $nameMethod = $options->name_method ?>
        <?php if ($options->object): ?>
        <?php echo op_image_tag_sf_image($options->object->getImageFileName(), $imgParam) ?>
        <?php else: ?>
        <?php echo op_image_tag('no_image.gif', $imgParam) ?>
        <?php endif; ?>
        op_image_tag_sf_imageに渡されているオプションは$imgParamという配列をテンプレート内で独自に定義していることがわかります。
        $imgParam初期化後、op_image_tag_sf_imageに渡すまでの間のどこかで
        <?php $imgParam['no_image'] = op_image_path('コミュ専用のNOIMAGE画像'); ?>
        のような行を追加すれば変更できますが、_partsMemberImageBox.phpはコミュTOPのみならずメンバープロフィール等でも使用されるパーツテンプレートなので、ここで変更してしまうとコミュだけでなくメンバーのほうも変更されてしまい、不都合です。
        そこで、パーツ呼び出し時にno_imageの指定がある場合のみ、$imgParam['no_image']をセットすることを考えます。つまり、こんな感じです。
        <?php $options->setDefault('no_image', false); ?>
        <?php if ($options->no_image): ?>
          <?php $imgParam['no_image'] = $options->no_image; ?>
        <?php endif; ?>
        あとは、community/templates/homeSuccess.phpに戻ってno_imageオプションを渡すだけです。
        <?php
        $options = array(
          'object' => $community,
          'no_image' => op_image_path('コミュ専用のNOIMAGE画像'),
        );
        op_include_parts('memberImageBox', 'communityImageBox', $options);
        ?>

        コミュニティ検索結果のno_image画像を任意の画像に変える

        コミュニティ検索結果のテンプレートはapps/pc_frontend/modules/community/searchSuccess.php
        しかし、コミュTOP同様にop_include_parts()ヘルパーでsearchResultListが呼び出されているので、実際に見るべきテンプレートはapps/pc_frontend/templates/_partsSearchResultList.phpです。
        op_image_tag_sf_imageヘルパーの呼び出しは
        <?php echo link_to(op_image_tag_sf_image($result->getImageFilename(), array('size' => '76x76')), sprintf($options['link_to_detail'], $result->getId())); ?>
        のように行われています。ヘルパーコールが重複して見づらいですが、op_image_tag_sf_image()に渡されているオプションはarray('size' => '76x76')のみだとわかります。
        コミュTOPの時と同様に、このarray()に'no_image' => op_image_path('コミュ専用のNOIMAGE画像')を足したいのですが、画像の表示オプションに各データ行ごとに違いはないですから、わざわざ個別のコミュデータごとにarray('size' => '76x76', 'no_image' => op_image_path('コミュ専用のNOIMAGE画像'))を作る意味はなく、全部のデータに共通のオプションを作ってしまって良いでしょう。
        具体的には$options['pager']->getResults()のforeachループが始まるより前に、
        <?php $options->setDefault('no_image', false); ?>
        <?php $imgParam = array('size' => '76x76'); ?>
        <?php if ($options->no_image): ?>
          <?php $imgParam['no_image'] = $options->no_image; ?>
        <?php endif; ?>

        を追記して(コミュTOPのmemberImageBox同様、searchResultListも別の画面でも使うパーツのため、直接の書き換えは避けます)、foreachループ内のop_image_tag_sf_image()ヘルパー呼び出し部分は下記のように書き換えます。
        <?php echo link_to(op_image_tag_sf_image($result->getImageFilename(), $imgParam), sprintf($options['link_to_detail'], $result->getId())); ?>
        後は、community/templates/searchSuccess.phpに戻ってsearchResultListを呼び出す際のオプションにno_imageを追加するだけです。
        $options = array(
          'title'          => __('Search Results'),
          'pager'          => $pager,
          'link_to_page'   => '@community_search?page=%d',
          'link_to_detail' => '@community_home?id=%d',
          'list'           => $list,
          'no_image' => op_image_path('コミュ専用のNOIMAGE画像'),
        );

        #このように、PNE3は拡張性が高くできていると思うのですが、あまり方法が知られていないのが残念ですね^^;


        1

        PR

        calendar

        S M T W T F S
         123456
        78910111213
        14151617181920
        21222324252627
        282930    
        << April 2013 >>

        twitter

        selected entries

        categories

        archives

        recent comment

        • djangoテンプレート上でmodelのメソッドに引数を渡す方法(djangoで出勤簿アプリ試作中♪)
          GavannITサービス-なりとみ
        • 私がそれでも名古屋市に住み続ける理由を6つにまとめてみた!
          bose wireless speaker
        • FastCGIでdjango…400エラー???
          levi's
        • さくらインターネットdjangoが突然500エラー!?(Pythonバージョンアップされてた
          salomon running shoes
        • 私がそれでも名古屋市に住み続ける理由を6つにまとめてみた!
          louboutin shoes
        • FastCGIでdjango…400エラー???
          yeezy boost 350
        • さくらインターネットdjangoが突然500エラー!?(Pythonバージョンアップされてた
          jordan 11
        • Silexでエラーページをカスタマイズする方法 : Symfony Advent Calendar 2011 - day 12
          pandora jewelry
        • django対symfony 日本語メール送信(その1 symfony編)
          nike air vapormax
        • 解決!XREAでCGI版Pythonを使ってdjangoを動かす(人柱?)
          kate spade

        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