joppot

コピペで絶対動く。説明を妥協しない

プログラミング

cakephp2.5.6をfabric+cuisineを使用してインストールする

投稿日:

Pocket

rjhiaehgae

概要

みなさんこんにちはcandleです。今回はcakephp2.5.6の環境構築をfabricを使用して、インストールしてみましょう。cakephpはrailsと比べると100倍くらい簡単に環境構築ができるます。これをfabricを使用して環境構築を自動化したいと思います。

前提

fabricとcuisineがインストールされている
mysqlサーバが立ち上がっている
fabricのsshの設定ができている

SPONSORED LINK


今回使うソースコード

pythonはインデントによってif文や処理の適応範囲を決めるのでコードを分割して説明するのは得策ではないと考え始めにソースコード全てのせます。

 # -*- encoding:utf-8 -*-
from fabric.api import env, settings,local,run,sudo,cd
from fabric.colors import *
from fabric.decorators import task,roles
from fabric.contrib.files import *
from cuisine import mode_sudo,dir_exists,file_append,file_exists,command_check
import random

"この3つはsshの設定。いらないなら削除"
env.hosts = ['192.168.11.1']
env.user = "candle"
env.password ="d9ejfaoh894f"

def mysql_exec(mysql_command , mysql_user , mysql_password , mysql_host):
  run('echo "' + mysql_command + '"|mysql --batch --user=%s --password=%s --host=%s' % (mysql_user, mysql_password, mysql_host), pty=True)


@task
def cakephp2_installing():
  """cakephp2.5.6をインストールする"""

  "cakphp2のプロジェクト名をローマ字で記入してください"
  "例)blog , mysns , firstcake など"
  project_name="";
  
  "cakephpを置く場所のパス"
  "例) /Applications/MAMP/htdocs/ , /var/www/ など"
  path_of_cakephp_place=""

  "mysqlのホストかIPアドレス 例「hogehoge.com」「localhost」「192.16.8.1.」"
  mysql_host=""

  "mysqlのユーザー名 例)「root」「hogeuser」"
  mysql_user=""

  "mysqlのパスワード"
  mysql_password=""

  "cakephp2.5.6のダウンロード"
  with cd(path_of_cakephp_place):
    if not dir_exists(project_name):
      run("wget -O cake.zip https://codeload.github.com/cakephp/cakephp/zip/2.5.6")
      run("unzip cake.zip")
      run("rm -f ./cake.zip")
      run("mv cakephp-2.5.6 "+project_name)

  "cakephpで使うセキュリティシードを自動的に生成"
  with cd(path_of_cakephp_place+project_name):
    if not contains("./app/Config/core.php","changed salt"):
      source_str = '1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
      num_str = '1234567890'
      security_salt = ("".join([random.choice(source_str) for x in xrange(40)]))
      security_seed=("".join([random.choice(num_str) for x in xrange(35)]))
      run("sed -i -e \"s/('Security.salt', '[a-zA-Z0-9]*');/('Security.salt', '"+security_salt+"');#changed salt/g\" ./app/Config/core.php")
      run("sed -i -e \"s/('Security.cipherSeed', '[0-9]*');/('Security.cipherSeed', '"+security_seed+"');#changed seed/g\" ./app/Config/core.php")

    "もしもプロジェクト名と同一のデータベースが無ければ開発用とテスト用を作成"
    mysql_exec("CREATE DATABASE IF NOT EXISTS "+project_name+"_dev DEFAULT CHARACTER SET utf8;",mysql_user,mysql_password,mysql_host)
    mysql_exec("CREATE DATABASE IF NOT EXISTS "+project_name+"_test DEFAULT CHARACTER SET utf8;",mysql_user,mysql_password,mysql_host)

    "cakephpのデーターベース設定ファイルを作成"
    if not file_exists("./app/Config/database.php"):
      run("cp ./app/Config/database.php.default ./app/Config/database.php")

      "データベースの設定を更新"
    if file_exists("./app/Config/database.php"):
      if not contains("./app/Config/database.php","cahnged database setting"):
        run("sed -i -e \"s/'login' => 'user'/'login' => '"+mysql_user+"'/g\" ./app/Config/database.php")
        run("sed -i -e \"s/'host' => 'localhost'/'host' => '"+mysql_host+"'/g\" ./app/Config/database.php")
        run("sed -i -e \"s/'password' => 'password'/'password' => '"+mysql_password+"'/g\" ./app/Config/database.php")
        run("sed -i -e \"s/'database' => 'database_name'/'database' => '"+project_name+"_dev'/g\" ./app/Config/database.php")
        run("sed -i -e \"s/'database' => 'test_database_name'/'database' => '"+project_name+"_test'/g\" ./app/Config/database.php")
        run("sed -i -e \"s/\/\/'encoding' => 'utf8'/'encoding' => 'utf8'/g\" ./app/Config/database.php")
        file_append("./app/Config/database.php",'/*cahnged database setting*/')


以下説明をします。

必要なパッケージをインポートする

fabfile.pyを開いて、必要なライブラリをインポートします。

importimportantcakephpbuilduplibrary

ここで用いているのはfabricとcuisineとrandomです。

mysql実行関数を定義する

他の記事でも上げましたが、fabric経由でmysqlを実行する関数を作成します。

mysqlexecforcakephp

cakephpの環境を構築する上で必要な情報を記入する

下の変数を埋めます。

cakephpvalue

project_nameにはcakephpのプロジェクト名を入れてください。
path_of_cakephp_placeにはcakephpのプロジェクトを置くパスを記入してください。
mysql各種の変数はmysqlサーバに対する適切な値を入れてください。


cakephp2.5.6のダウンロードとプロジェクト作成

githubからcakephp2.5.6をダウンロードしそれを解凍してプロジェクトを作ります。
wgetコマンドとunzipコマンドを使用するのでコマンドが無い場合は予め導入しておいてください。

downloadcakephp2


セキュリティシードを自動で設定する

cakephpのcore.phpに書かれているセキュリティのシード値を自動的に変更します。

setsecurityseed

mysqlにcakephpで使うデータベースを作成する

mysqlクエリを発行して、cakephpで使うデータベースを作成します。IF EXISTSでデータベースが既にある場合は作成しない様になっています。
fabricmysqlexecquery

データベースの設定ファイルの編集

最後にデータベースの設定を変更して完成です。

makedatabasefileandedit

実際に実行してみる

fabファイルがあるところで下のコマンドを実行してまずはコマンドを確認

fab -l

うまくいけば、cakephp2_installingコマンドが確認できます。

fabcommandlist

実行してみましょう。わたしは「minmin」というプロジェクトを作ってみます。

fab cakephp2_installing

これで、指定の場所にcakephp2のプロジェクトが作られます。

ありますね。
projectcheck

まとめ

cakephp2ならではの簡単な環境構築をさらに自動化で簡単にしてみました。
これならお手のもんですね。

スポンサードリンク

「為になったなぁ」と思ったら、シェアお願いします。

-プログラミング
-, , ,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

wordpressのwp_queryでpost投稿の記事一覧を取得する

概要 みなさんこんにちはcandleです。 最近はwordpressの開発を行っており、そこで、試行錯誤したwp_queryを使った記事一覧の取得の仕方を紹介します。wordpressは少し前まで、q …

ruby on railsのgemのインストールで不要なファイルをインストールしない設定

概要 みなさんこんにちはcandleです。私の記事はどうしても先人のプログラマーがまとめた内容を追試しているような感じになっていますが、これも重要なことなので、忘れないためにもまとめておきます。 ru …

phpでcompassを使った開発の仕方

概要 みなさんこにちはcandleです。今回はphpでcompassを使いたいと思います。 compassは別名scssともいいます。 compassはphpのライブラリが既にあります。 しかし、その …

phpmyadminでmysqlデータベースの照合順序を変更する

概要 みなさんこんにちはcandleです。 ちょっとした事なのですが、意外に分からなかったのでまとめました。 phpmyadminを使ってデータベースを作ると、うっかり、utf8_general_ci …

phpのsnappyで複数のwebサイトのサムネイルを保存する

概要 前回、snappyの基本的な使い方を試しました。 今回はsnappyを使って、あらかじめ、定義してある複数のwebサイトのサムネイルを保存してみたいと思います。 前提 composerがインスト …

  • English
  • 日本語

プロフィール


ベンチャー企業のCTOをやってます。大学時代にプログラミングを始め、javaから入門し、C++へて、PHPへと進み、会社ではRailsを使用。自動化が大好きなプログラマー

スポンサードリンク

アーカイブ