Laravel 5.4: メンテナンスモードの使い方、仕組み

メンテナンスモードの使い方

  • 開始
$ php artisan down
  • 復帰
    • Be right back.と表示される
php artisan up

メンテナンスモードの仕組み

  • storage/framework/down が存在していたらメンテナンスモードになっている
$ ls -la storage/framework/down
ls: cannot access 'storage/framework/down': No such file or directory

$ php artisan down
Application is now in maintenance mode.
$ ls -la storage/framework/down
-rw-r--r-- 1 vagrant vagrant 66 Feb 14 03:44 storage/framework/down

$ php artisan up
Application is now live.
$ ls -la storage/framework/down
ls: cannot access 'storage/framework/down': No such file or directory
  • メンテナンスページのテンプレート
    • vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/views/503.blade.php にある

TODO

  • 部分的にメンテナンスモードにできる?
  • あるIPだけ限定でアクセスさせることができる?

参照

Laravel 5 メンテナンスモード IP制限

Laravel 5.4: 環境設定

DotEnvライブラリ

設定ファイル

  • .env: 各環境で使う設定ファイル
    • git管理対象外
  • .env.example: サンプルファイル
    • git管理対象
$ diff .env.example .env
2c2
< APP_KEY=
---
> APP_KEY=base64key...

設定の適用

  • 設定ファイルの記述
    • .env
DB_DATABASE=homestead
  • 設定の適用
    • .envから値が取れないとき第二引数の値が入る
env('DB_DATABASE', 'foo')
  • 設定の更新
    • storage/framework/config.phpが更新
$ php artisan config:cache

環境名の取得

use App;
$environment = App::environment(); // get "local"
if (App::environment('local'))
{
    // The environment is local
}
 
if (App::environment('local', 'staging'))
{
    // The environment is either local OR staging...
}

TODO

  • 各環境名の設定方法
  • 実際に各環境を立てる

参照

【Laravel5】実行環境と設定ファイルの関係 - Bloq4Developer

Laravel 5.4: Blade テンプレートを使う

if

@if (count($people))

@endif

foreach

@foreach ($people as $person)
  {{ $person }}
@endforeach

Template

  • テンプレート側: @yield('bar')
  • テンプレート利用側:
    • Fooテンプレートの継承: @extends('foo')
    • セクション書き換え: @section('bar'), @stop

  • テンプレート: resources/views/app.blade.php
<body>
    <div class="container">
        @yield('content')
    </div>
 
    @yield('footer')
 
</body>
  • テンプレート利用: resources/views/pages/about.blade.php
@extends('app')
 
@section('content')
 
<h1>About {{$name}}</h1>
 
@if (count($people))
<h3>People I Like:</h3>
 
<ul>
    @foreach ($people as $person)
        <li>{{ $person }}</li>
    @endforeach
</ul>
@endif
 
@stop

参照

http://site.oganity.pw/177/

Laravel 5.4: Viewへデータを引き渡す

Summary

  • テンプレートはBladeファイル: foo.blade.php
  • withを使ってControllerからViewへ渡す

  • Controller側:

    • view('pages.about')->with('name', $name)
  • View側:
    • エスケープ: {{$bar}}
    • 非エスケープ: {!! $bar !!}

How to basic

  • app/Http/routes.php
Route::get('about', 'PagesController@about');
  • コントローラ作成
$ php artisan make:controller PagesController
  • aboutメソッド作成
    • app/Http/Controllers/PagesController.php
class PagesController extends Controller {
 
    public function about() {
        $name = 'Jeffery Way';
        return view('pages.about')->with('name', $name);
    }
 
}
  • テンプレート作成
    • resources/views/pages/about.blade.php
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
  <h1>About {{$name}}</h1>
</body>
</html>

How to advance

  • エスケープ

    • エスケープ: {{$bar}}
    • 非エスケープ: {!! $bar !!}
  • データ渡しにwithを使う

    • 単数:
      • Controller: view('pages.about')->with('name', $name)
      • Template: {{$name}}
    • 複数(配列):
      • Controller: view('pages.about')->with(['first' => 'Jeffery', 'last' => Way'])
      • Template: {{$first}} {{$last}}
  • データ渡しにwithを使わない
    • 単数:
      • Controller: view('pages.about', $data)
      • Template: {{$first}} {{$last}}
    • 複数(連想配列):
      • Controller: view('pages.about', $data)
      • Template: {{$name['first']}} {{$name['last']}}
    • 複数(別変数):
      • Controller: view('pages.about', compact('first', 'last'))
      • Template: {{$first}} {{$last}}

参考

http://site.oganity.pw/160/

Laravel 5.4: Routing, Controller, Viewの流れを触る

What?

  • ざっくり最小のRouting, Controller, Viewの流れを確認する

Why?

  • ざっくり最小のものを作りたい

Routing

  • routes/: ルーティングディレクト
    • ver 5.3 から app/Http/routes.php は廃止
$ less routes/
api.php       channels.php  console.php   web.php
Route::get('/', 'welcome');

or

Route::get('/', function () {
    return view('welcome');
});

Controller

  • app/Http/Controllers/以下にある
    • app/Http/Controllers/WelcomeController.php
<?php

namespace App\Http\Controllers;

class WelcomeController extends Controller {
  public function index()
  {
    return view('welcome');
  }
}

View

  • blade テンプレートエンジンを使用
  • resources/views/以下にある
    • resources/views/welcome.blade.php

参考

Laravel5 入門 インストールからMVCの基本機能をさっと眺める | hrendoh's memo http://site.oganity.pw/154/

apt-getとyumの違い

Why?

  • いっつもyum使ってるけど、Ubuntu使ったときにapt-get使ったけど、違いが説明しきれなかった

同じところ

  • apt も yum もパッケージ管理ソフト
    • 自動ダウンロード、インストール、アップグレード

違うところ

参考

Linux パッケージ管理コマンド比較(yum / dnf / apt 等) - らくがきちょう

TODO

Ubuntu に Java インストール

What?

  • UbuntuJava環境をインストールする

Why?

  • NeobundleInstall を叩いたときにJavaがなくてコケた

Solution

  • Apt-get でインストールする

  • Ubuntu version

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.1 LTS"
  • パッケージのIndexをアップデートする
$ sudo apt-get update
  • Javaがインストールされているか確認
$ java -version
bash: java: command not found
  • Apt-getでJava Runtime Environment (JRE)をインストールする
$ sudo apt-get install default-jre
$ sudo apt-get install default-jdk

参考

How To Install Java on Ubuntu with Apt-Get | DigitalOcean

TODO List

  • Apt-get と yum の使い分け
  • JREJDK の違い