Postgre SQL   发布时间:2022-05-20  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Elixir 用Phoenix,Postgresql和Ecto创建一个书单应用大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

本文通过一个书单应用简要介绍使用Phoenix框架创建一个Web应用程序的基本步骤.

安装Phoenix

     
1
2
3
4
     
git clone http s://github. com/phoenixframework/phoenix.git
cd phoenix
git checkout v0. 5.0
mix do deps. get,compile

创建书单项目

在phoenix源代码目录中运行如下命令创建一个phoenix项目目录结构

     
1
     
mix phoenix. new book_store ../book_store

目录../book_store不必事先存在,phoenix会自动创建.

添加依赖库

编辑mix.exs文件,修改后如下:

     
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
     
defmodule BookStore.@H_11_24@mixfile do
use @H_11_24@mix.Project
def project do
[ @H_772_174@app: @H_772_174@:book_store,
@H_772_174@version: "0.0.1",
@H_772_174@elixir: "~> 1.0",
@H_772_174@elixirc_paths: [ "lib","web"],
@H_772_174@compilers: [ @H_772_174@:phoenix] ++ @H_11_24@mix.compilers,
@H_772_174@deps: deps]
end
# Configuration for the OTP application
#
# Type `mix Help compile.app` for more information
def application do
[ @H_772_174@mod: { BookStore, []},
@H_772_174@applications: [ @H_772_174@:phoenix,@H_772_174@:cowboy,@H_772_174@:logger,@H_772_174@:POSTGRex,@H_772_174@:ecto]]
end
# SpecifIEs your project dependencIEs
#
# Type `mix Help deps` for examples and options
defp deps do
[{ @H_772_174@:phoenix,"0.5.0"},
{ @H_772_174@:cowboy,"~> 1.0"},
{ @H_772_174@:POSTGRex,"~> 0.5"},
{ @H_772_174@:ecto,"~> 0.2.0"}]
end
end

和修改之前的mix.exs文件相比有两个变更处:

  • 在application函数中增加了两个依赖的应用程序:POSTGRes和:ecto(16行)
  • 在deps函数增加两个依赖库{:POSTGRex,"~> 0.5"}和{:ecto,"~> 0.2.0"}(24,25行)
  • @H_419_321@

    运行

         
    1
         
    mix do deps. get,compile

    创建一个仓库(Repo)

    创建文件web/models/repo.ex,内容如下:

         
    1
    2
    3
    4
    5
    6
    7
    8
    9
         
    defmodule BookStore.Repo do
    use Ecto.Repo, @H_772_174@adapter: Ecto.Adapters.POSTGRes
    def conf do
    parse_url "ecto://POSTGRes:POSTGRes@localhost/book_store"
    end
    def priv do
    app_dir( @H_772_174@:book_store,"priv/repo")
    end
    end

    创建数据库:

         
    1
         
    createdb book_store -U POSTGRes --enCoding='utf- 8' --locale=en_Us. UTF- 8 -- template=template0

    修改lib/book_store.ex为,如下:

         
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
         
    defmodule BookStore do
    use Application
    # See http://elixir-lang.org/docs/stable/elixir/Application.HTML
    # for more information on OTP Applications
    def start(_type, _args) do
    import Supervisor.Spec, @H_772_174@warn: false
    children = [
    # define workers and child supervisors to be supervised
    worker( BookStore.Repo, [])
    ]
    opts = [ @H_772_174@strategy: @H_772_174@:one_for_one,@H_772_174@name: BookStore.Supervisor]
    Supervisor.start_link(children,opts)
    end
    end

    编译

         
    1
         
    @H_571_40@mix compile

    创建模型

    创建文件web/models/books.ex,内容如下:

         
    1
    2
    3
    4
    5
    6
    7
    8
    9
         
    defmodule BookStore.Books do
    use Ecto.Model
    scheR_204_11845@a "books" do
    fIEld @H_772_174@@R_123_6964@,@H_772_174@:string
    fIEld @H_772_174@:description,@H_772_174@:string
    fIEld @H_772_174@:author,@H_772_174@:string
    fIEld @H_772_174@:publisher,@H_772_174@:string
    end
    end

    创建数据库移植脚本

         
    1
    2
    3
    4
    5
         
    $ mix ecto.gen.migration Bookstore.Repo create_book
    Compiled web /models/books.ex
    Generated bookstore.app
    * creaTing priv /repo/migrations
    * creaTing priv /repo/migrations /20141112170140_create_book.exs

    编辑生成的priv/repo/migrations/20141112170140_create_book.exs脚本,内容如下:

    defmodule BookStore.Repo.Migrations.CreateBook do use Ecto.Migration def up do ["create table books(\ ID serial priMary key,\ title varchar(125),\ description text,\ author varchar(255),\ publisher varchar(255))",\ "INSERT INTO books(title,description,author,publisher) \ VALUES ( \ 'ProgrAMMing Elixir',\ 'ProgrAMMing Elixir: Functional |> Concurrent |> Pragmatic |> Fun',\ 'Dave Thomas',\ 'The Pragmatic BooksHelf')" ] end def down do "drop table books" end end

    运行移植脚本

         
    1
         
    @H_571_40@mix ecto.migrate BookStore.Repo

    创建查询

    创建文件web/models/querIEs.ex,内容如下:

         
    1
    2
    3
    4
    5
    6
    7
    8
         
    defmodule BookStore.QuerIEs do
    import Ecto. query
    def books_query do
    query = from book in BookStore.books,
    SELEct: book
    BookStore.Repo. all( query)
    end
    end

    配置路由

    打开文件web/router.ex,修改为如下:

         
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
         
    defmodule BookStore.Router do
    use Phoenix.Router
    scope "/" do
    # Use the default browser stack.
    pipe_through :browser
    # get "/",BookStore.PageController,: index,as: :pages
    get "/",BookStore.bookController,as: :books
    end
    # Other scopes may use custom stacks.
    # scope "/API" do
    # pipe_through :API
    # end
    end

    创建控制器

    创建文件web/controllers/book_controller.ex,内容如下:

         
    1
    2
    3
    4
    5
    6
    7
    8
         
    defmodule BookStore.BookController do
    use Phoenix.Controller
    plug @H_772_174@:action
    def index(conn,_params) do
    books = BookStore.QuerIEs.books_query
    render conn,"index",@H_772_174@books: books
    end
    end

    创建书单视图

    创建文件web/vIEws/book_vIEw.ex,内容如下:

         
    1
    2
    3
         
    defmodule BookStore.BookVIEw do
    use BookStore.VIEws
    end

    创建目录

         
    1
         
    @H_571_40@mkdir web/templates/book

    并添加文件web/templates/book/index.HTMl.eex,内容如下:

         
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
         
    <h1>我的图书 </h1>
    <table class='table table-bodered table-Striped'>
    <thead>
    <tr>
    <th># </th>
    <th>标题 </th>
    <th>描述 </th>
    <th>作者 </th>
    <th>出版社 </th>
    </tr>
    </thead>
    <tbody>
    <%= for book <- @books do %>
    <tr>
    <td> <%= book.ID %> </td>
    <td> <%= book.title %> </td>
    <td> <%= book.description %> </td>
    <td> <%= book.author %> </td>
    <td> <%= book.publisher %> </td>
    </tr>
    <% end %>
    </tbody>
    </table>

    启动应用,并刷新页面

         
    1
         
    @H_571_40@mix phoenix.start

    我的书单应用

    完成!

    资料

    1. Book LisTing App With Elixir,Phoenix,POSTGRes and Ecto
      http://learnelixir.com/blog/2014/10/05/build-web-app-with-elixir/

大佬总结

以上是大佬教程为你收集整理的Elixir 用Phoenix,Postgresql和Ecto创建一个书单应用全部内容,希望文章能够帮你解决Elixir 用Phoenix,Postgresql和Ecto创建一个书单应用所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: