少し前にインストールした、Elixir/Phoenixを再利用しようとしたら、動かないところがあったので、記事にします。
対応としては、mix
のphoenix
をリインストールします。ただし、以前構築した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 件のコメント:
コメントを投稿