2016年9月28日水曜日

Elixir/Phoenixを何度もインストールする時に

少し前にインストールした、Elixir/Phoenixを再利用しようとしたら、動かないところがあったので、記事にします。

対応としては、mixphoenixをリインストールします。ただし、以前構築したphoenixは動かなくなることがあります。

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

以下は詳細です。

phoenix_ecto, phoenix_htmlのエラー

mixでプロジェクトを作成して、mix phoenix.serverしたところエラーが出ました。

mix phoenix.new prj --database mysql
cd prj
mix phoenix.server

依存性エラーが出ます。

== Compilation error on file lib/phoenix_ecto/html.ex ==
** (CompileError) lib/phoenix_ecto/html.ex:7: unknown key :model for struct Phoenix.HTML.Form
    (elixir) src/elixir_map.erl:185: :elixir_map."-assert_struct_keys/5-lc$^0/1-0-"/5
    (elixir) src/elixir_map.erl:62: :elixir_map.translate_struct/4

could not compile dependency :phoenix_ecto, "mix compile" failed. You can recompile this dependency with "mix deps.compile phoenix_ecto", update it with "mix deps.update phoenix_ecto" or clean it with "mix deps.clean phoenix_ecto"

mix.exsを以下のように変更したら依存性はOKになる。

{:phoenix_ecto, "~> 3.0"},
{:mariaex, ">= 0.0.0"},
{:phoenix_html, "~> 2.6"},

phoenixをリインストールしてOKならば、上記のようにリインストールする。 ただ、リインストールすると、当然古いphoenixプロジェクトは動かなくなることがある。

dev.exsの設定

つい忘れがちなconfig設定も行います。 localhostで動かないときは、netstat -an | grep 3306などで解放ホストとポートを確認すると良いです。 今回は、外部IPで開いていて、localhostでは通りませんでした。 mysqlクライアントからは、localhostで入れてもectoからはいけない時があります。

config :word_prj, WordPrj.Repo,
  adapter: Ecto.Adapters.MySQL,
  username: "XXX",
  password: "XXX",
  database: "XXXDB",
  hostname: "XXX.XXX.XXX.XXX",
  pool_size: 10

あとは、migrateして

MIX_ENV=dev mix ecto.migrate

起動します。

mix phoenix.server

ページを追加

ページ追加については同じコマンドで動きました。

# テンプレート作成
phoenix.gen.html Repos table col1:string col2:string
# DBにマイグレート
MIX_ENV=dev mix echo.migrate
# router追加
vi web/router.ex

 scope "/", Prj do
   pipe_through :browser # Use the default browser stack

   get "/", PageController, :index
   resources "/card", CardsController
 end
# サーバー起動
mix phoenix.server

今時、一つのサーバに複数のWEBアプリを入れることは稀なケースかと思いますが、一つのサーバに複数世代のphoenixを混在させる場合は注意が必要です。

0 件のコメント:

コメントを投稿