【发布时间】:2017-08-25 22:14:47
【问题描述】:
我想知道phoenix.gen.json 和phx.gen.json 的区别是什么。
我目前使用的是 Phoenix 1.3。 Ubuntu 16.04LTS。和以下版本的 Erlang/Elixir
Erlang/OTP 20 [erts-9.0] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:10] [hipe] [kernel-poll:false]
Elixir 1.5.1
phoenix.gen.json:
$> mix phoenix.gen.json Session sessions session_id:string
mix phoenix.gen.json is deprecated. Use phx.gen.json instead.
* creating web/controllers/session_controller.ex
* creating web/views/session_view.ex
* creating test/controllers/session_controller_test.exs
* creating web/views/changeset_view.ex
mix phoenix.gen.model is deprecated. Use phx.gen.schema instead.
* creating web/models/session.ex
* creating test/models/session_test.exs
* creating priv/repo/migrations/20170823190558_create_session.exs
Add the resource to your api scope in web/router.ex:
resources "/sessions", SessionController, except: [:new, :edit]
Remember to update your repository by running migrations:
$ mix ecto.migrate
与phx.gen.json:
$> mix phx.gen.json API ContentAsset content_assets content_id:integer
* creating lib/my_app_web/controllers/content_asset_controller.ex
* creating lib/my_app_web/views/content_asset_view.ex
* creating test/my_app_web/controllers/content_asset_controller_test.exs
* creating lib/my_app_web/views/changeset_view.ex
* creating lib/my_appi_web/controllers/fallback_controller.ex
* creating lib/my_app/api/content_asset.ex
* creating priv/repo/migrations/20170823191342_create_content_assets.exs
* creating lib/my_app/api/api.ex
* injecting lib/my_app/api/api.ex
* creating test/my_app/api/api_test.exs
* injecting test/my_app/api/api_test.exs
Add the resource to your :api scope in lib/my_app_web/router.ex:
resources "/content_assets", ContentAssetController, except: [:new, :edit]
Remember to update your repository by running migrations:
$ mix ecto.migrate
我们可以看到,这两个生成器不会生成相同的文件集。
此外,当我们运行开发服务器时。我在 phx.gen.json 文件中看到以下错误。
$> mix phx.server
Compiling 12 files (.ex)
== Compilation error in file lib/my_app_web/views/content_asset_view.ex ==
** (CompileError) lib/my_app_web/views/content_asset_view.ex:2: module MyAppWeb is not loaded and could not be found
(elixir) expanding macro: Kernel.use/2
lib/my_app_web/views/content_asset_view.ex:2: MyAppWeb.ContentAssetView (module)
(elixir) lib/kernel/parallel_compiler.ex:121: anonymous fn/4 in Kernel.ParallelCompiler.spawn_compilers/1
【问题讨论】: