Phoenix 1.4rcを試す② インストール編（不具合時の復旧もあるよ）

[fukuoka.ex](https://fukuokaex.connpass.com/)代表のpiacereです
ご覧いただいて、ありがとうございます:bow:

革新的なアップデートてんこ盛りのPhoenix 1.4.0-rc.xを数回に分けて試す連載です

早くもrc.1が出たので、今回からrc.1にスイッチして進めます

前回までの記事は、以下になります
　|> [<b>Phoenix 1.4rcを試す① アップデート紹介編</b>](https://qiita.com/piacere_ex/items/34a56a418a99701a0ac1)

今回は、Phoenix 1.4.0-rc.1をインストールして、動かしてみます

なお、Phoenixは、ElixirのWebフレームワークです

内容が、面白かったり、気に入ったら、「いいね」よろしくお願いします :wink:

# 既存Phoenixのアンインストール

既にPhoenix 1.3以降がインストールされている場合は、まずアンインストールが必要です

```
mix archive.uninstall phx_new
```

ちなみに、アンインストールを行わずにPhoenix 1.4をインストールすると、以下のようなエラーが出るので、先にアンインストールは行ってください

```
== Compilation error in file lib/phx_new/ecto.ex ==
** (File.Error) could not read file "c:/Users/chris/oss/phoenix/installer/templates/phx_ecto/repo.ex": no such file or directory
    (elixir) lib/file.ex:319: File.read!/1
    lib/phx_new/generator.ex:28: anonymous fn/4 in Phx.New.Generator."MACRO-__before_compile__"/2
    (elixir) lib/enum.ex:1925: Enum."-reduce/3-lists^foldl/2-0-"/3
    lib/phx_new/generator.ex:24: anonymous fn/3 in Phx.New.Generator."MACRO-__before_compile__"/2
    (elixir) lib/enum.ex:1925: Enum."-reduce/3-lists^foldl/2-0-"/3
    expanding macro: Phx.New.Generator.__before_compile__/1
    lib/phx_new/ecto.ex:1: Phx.New.Ecto (module)
```

# Phoenix 1.4.0-rc.1のインストール

以下でPhoenix 1.4.0-rc.1がインストールできます

```
mix archive.install hex phx_new 1.4.0-rc.1
```

# Phoenix 1.4.0のPJ作成、動作確認

インストール後、以下手順で、Phoenix PJを作成してください

なお、PJ名に「Web」という文字列を含むと、フォルダ作成やモジュール命名の都合から、不具合が出るため、入れないよう気を付けてください（エラーメッセージから判断付けるのは、かなり困難なので、ご注意を）

```
mix phx.new phx14rc1_sample --no-webpack --no-ecto
　…（ファイル作成ログが続く）…
Fetch and install dependencies? [Yn] （←n、Enterを入力）
　…（この後のコマンド指示が続く）…
cd phx14rc1_sample
mix deps.get
iex -S mix phx.server
```

ちなみにPhoenix 1.3の頃は、mix phx.newした際の以下入力で、Yを押下しても、mix deps.getが実行されない現象がありましたが、Phoenix 1.4では解決したようなので、以下手順の方が良いでしょう

```
mix phx.new phx14_sample --no-webpack --no-ecto
　…（ファイル作成ログが続く）…
Fetch and install dependencies? [Yn] （←Y、Enterを入力）
　…（mix deps.getの実行と、この後のコマンド指示が続く）…
cd phx14_sample
iex -S mix phx.server
```

Phoenix起動の際、以下ログが出ていれば起動成功です

```
…
[info]  Running Phx14SampleWeb.Endpoint with cowboy 1.1.2 at http://localhost:4000
Interactive Elixir (1.7.3) - press Ctrl+C to exit (type h() ENTER for help)
iex> 
```

ブラウザで「```http://localhost:4000```」をアクセスすると、以下ページが表示されます

![image.png](https://qiita-image-store.s3.amazonaws.com/0/155423/c30aed66-f665-69c2-4b4d-5cf5819cf19c.png)

リンクとレイアウトが、Phoenix 1.3から、少し変わっていますね

# Cowboy 2系に切り替える

Phoenix 1.4のデフォルトは、Cowboy 1系でdepsが設定されています

```elixir:mix.exs　※デフォルト
defmodule Phx14Sample.MixProject do
  use Mix.Project
  …
  defp deps do
    [
      {:phoenix, "~> 1.4.0-rc"},
      …
      {:cowboy, "~> 1.0"}
    ]
  end
end
```

Cowboy 2系に切り替えるには、手動で以下のように設定を書き換える必要があります

```elixir:mix.exs　※Cowboy2系に切り替えた後
defmodule Phx14Sample.MixProject do
  use Mix.Project
  …
  defp deps do
    [
      {:phoenix, "~> 1.4.0-rc"},
      …
      {:cowboy, "~> 2.5"}
    ]
  end
end
```

上記でPhoenixを起動済みの場合は、Ctrl+cを2回押して、iexを抜けた後、下記でモジュールを再取得後、Phoenixを起動し直します

```
mix deps.get
iex -S mix phx.server
```

Phoenix起動の際、以下ログが出ていればOKです

```
…
[info] Running Phx14SampleWeb.Endpoint with cowboy 2.5.0 at http://localhost:4000
Interactive Elixir (1.7.3) - press Ctrl+C to exit (type h() ENTER for help)
iex> 
```

ブラウザで「```http://localhost:4000```」を見ると、Cowboy 1系と特に変化が無いため、見た目では区別できませんが、以下ページが表示できます

![image.png](https://qiita-image-store.s3.amazonaws.com/0/155423/c30aed66-f665-69c2-4b4d-5cf5819cf19c.png)

# 参考：Cowboy 2系で不具合があった場合の復旧について

Cowboy 2系に切り替えた後、不具合があって、Cowboy 1系に戻したい場合は、mix.exsのCowboyバージョンを戻した後、以下の手順で復旧できます

```
mix deps.update --all
iex -S mix phx.server
```

Phoenix起動の際、以下ログが出ていれば復旧完了です

```
…
[info]  Running Phx14SampleWeb.Endpoint with cowboy 1.1.2 at http://localhost:4000
Interactive Elixir (1.7.3) - press Ctrl+C to exit (type h() ENTER for help)
iex> 
```

# 参考：Phoenix 1.4で不具合があった場合の復旧について

Phoenix 1.4のインストール時、もしくはインストール後に不具合があった場合、Phoenix 1.3に戻したいと思うので、Phoenx 1.3に戻すための手順も挙げておきます

まず、不具合のあるPhoenixをアンインストールします

なお最上部が、Phoenix 1.3もしくは自前でビルドしたPhoenix、2番目以降が、Phoenix 1.4.0の各rcとなります（今後、rcのバージョンが上がるたびに、該当バージョンのアンインストールを行うようにしてください）

```
mix archive.uninstall phx_new
mix archive.uninstall phx_new-1.4.0-rc.0
mix archive.uninstall phx_new-1.4.0-rc.1
```

次に、Phoenix 1.3をインストールし直します

```
mix archive.install https://github.com/phoenixframework/archives/raw/master/phx_new.ez
```

これでPhoenix 1.3を復旧できます

# 注意：Phoenixのバージョンを変えても既存Phoenix PJのバージョンは変わらない

Phoenixは、起動済みのWebサーバ上で動くWebアプリケーションとは異なり、各Phoenix PJ毎にPhoenixのWebサーバ機能が搭載されたアプリケーションとして構築されるため、Phoenixをインストールし直しても、構築済みのPhoenixのバージョンは変わりません

Phoenixの実態は、該当するPhoenixバージョンのWebサーバ機能を含んだソースコードやアセットをジェネレートするアプリケーションに過ぎないのです

# 終わり

今回は、Phoenix 1.4.0rcのインストールとCwoboy 2系への切り替え、それらの旧バージョンへの復旧について解説しました

[次回は、Phoenix 1.4.0-rcの動作確認](https://qiita.com/piacere_ex/items/28f2f655241d142980d8#_reference-044f6e7d6f68f682d98f)を順々に試していきます

# p.s.「いいね」よろしくお願いします

よろしければ、ページ左上の ![image.png](https://qiita-image-store.s3.amazonaws.com/0/155423/4d515047-cc48-382e-c2b1-3ad0cc50dbbf.png) や ![image.png](https://qiita-image-store.s3.amazonaws.com/0/155423/a4e3da58-70a3-4197-95a2-6a6906650d01.png) のクリックをお願いしますー:bow: