Phoenix入门篇

简介

Phoenix是Elixir开发的web框架,采用MVC架构。如果你有其他网络框架(如Ruby on Rails或Django)的开发经验,会对Phoenix的许多组件和概念感到熟悉。

Phoenix兼顾了开发效率和运行性能,同时也有一些有趣的新特性,如用于实时通信的channel以及高效的预编译模板。

在学习Phoenix之前,需要熟悉Elixir,因为Phoenix项目本身也是一个Elixir应用。本文是Phoenix的入门教程,旨在帮助你快速创建一个Phoenix项目并运行起来。更多更全面的知识你永远可以从Phoenix官网获取。

安装

在开始使用Phoenix之前,需要先安装Elixir。当然,安装Elixir的前提是安装Erlang,因为Elixir程序也是编译成beam运行在Erlang虚拟机中的。安装Erlang和Elixir不是本文的重点,大家可自行去各自的官网下载安装。要求是Elixir 1.14及以上版本,Erlang 24及以上版本,本教程使用的Phoenix是1.7.1版本。

运行 elixir -v 命令可以查看Erlang和Elixir的版本。

elixir -v
Erlang/OTP 24 [erts-12.0] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]

Elixir 1.14.0

安装好Erlang和Elixir之后,还需要安装Hex。Hex是Elixir的包管理工具,安装方式是在命令行执行下面的命令:

$ mix local.hex

如果你已经安装了Hex,上面的命令会将你的Hex更新到最新版本。

因为Elixir可以无缝使用Erlang的库,因此我们还需要安装Erlang的包管理工具。虽然Erlang没有官方的包管理工具,但是rebar3已经成为了事实上的Erlang官方包管理工具了。rebar3其实不用单独安装,后面安装Phoenix时会自动安装rebar3。如果你对安装rebar3感兴趣,可以看下这篇文章:rebar3安装-windows篇。建议还是看下,相信会有新的收获。特别是当你在PowerShell中运行Elixir相关命令报错时,它会给你答案。

如果你想搜索Elixir包或者查看包的文档,可以访问hexdocs网站。当然,Phoenix的文档也在这里可以找到。

一切就绪后,通过下面的命令安装Phoenix命令:

$ mix archive.install hex phx_new

做为后端框架,要用到数据库是很合理的,Phoenix默认使用的是PostgreSQL,当然MySQL也是支持的。数据库不是一个必选项,但是建议你有一个。

修改镜像源

Hex默认使用的镜像源在S3上,国内访问可能出现无法访问的情况。好在Hex也提供了国内的镜像源,Hex和rebar3都可以配置。

配置方式有两种,第一种是配置环境变量,如下:

export HEX_MIRROR="https://hexpm.upyun.com"
export HEX_CDN="https://hexpm.upyun.com"

第一行是配置Hex,第二行是配置rebar3。如果遇到下面的问题,可以先运行 mix local.hex

** (Mix) Could not verify authenticity of fetched registry file. This may happen because a proxy or some entity is interfering with the download or because you don't have a public key to verify the registry.

You may try again later or check if a new public key has been released in our public keys page: https://hex.pm/docs/public_keys

第二种方式是对于Hex和rebar3的配置方式就不一样了。对于Hex,可以使用下面的命令配置:

$ mix hex.config mirror_url https://hexpm.upyun.com

对于rebar3,需要修改项目的rebar.config文件:

{rebar_packages_cdn, "https://repo.hex.pm"}.

详细内容可参考下面的链接:

  1. https://ruby-china.org/topics/31631
  2. https://hex.pm/docs/mirrors

配置IDE

Elixir没有官方的IDE(集成开发环境),这里推荐VisualStudioCode和Spacemacs。

vscode推荐安装ElixirLS和Phoenix Framework这两个插件。Spacemacs配置Elixir开发环境推荐看官方文档,笔者也还未亲自试验,希望可行。

其他代码编辑器如Atom,IntelliJ IDEA以及vim等也有Elixir插件支持,可自行搜索配置。

HelloWorld

终于来到了HelloWorld,让我们来创建我们的第一个Phoenix应用。创建Phoenix应用的命令如下:

$ mix phx.new hello

hello 是项目名,它会在命令的工作目录下创建一个hello目录,这里也支持相对路径,比如 mix phx.new learn/hello ,此时工程文件会放到 ./learn/hello 目录下,项目名依然是hello。

前面我们说过,Phoenix默认使用的是PostgreSQL数据库,如果你使用的是MySQL数据库,可以使用 --database 指定:

$ mix phx.new hello --database mysql

除了PostgreSQL和MySQL,Ecto还支持MSSQl,SQLite3,ClickHouse和ETS。如果现阶段你还不打算使用数据库或者你的项目不需要使用数据库,那么可以使用 --no-ecto 去掉数据库依赖:

$ mix phx.new hello --no-ecto

Ecto是Elixir中一个功能强大的数据验证和持久化库,同时提供了数据库适配器,后面我们还会再学习它。

按下回车之后,命令会打印出它为你创建的文件,并询问你是否下载依赖:

$ mix phx.new hello
* creating hello/config/config.exs 
* creating hello/config/dev.exs 
* creating hello/config/prod.exs 
...

Fetch and install dependencies? [Yn]

我们输入Y来安装所需的依赖,如果是第一次执行命令,Phoenix还会询问你是否安装rebar3,选择安装即可。

安装完依赖以后,Phoenix会打印一段提示告诉你接下来如何启动应用:

Fetch and install dependencies? [Yn] Y 
* running mix deps.get 
* running mix deps.compile

We are almost there! The following steps are missing: 

		$ cd hello

Then configure your database in config/dev.exs and run: 

		$ mix ecto.create

Start your Phoenix app with: 
		
		$ mix phx.server

You can also run your app inside IEx (Interactive Elixir) as: 

		$ iex -S mix phx.server

先暂停一下,别急着按照提示去操作。

如果你创建应用时使用了 --no-ecto 选项,那么这里不会有 $ mix ecto.create 这条命令。如果你用到了数据库,也先别急着去执行这条命令。这条命令的功能是为你创建一个数据库,但是我们还没告诉ecto数据库在那里,如何连接以及数据库名称呢,所以先别急。

打开 hello/config/dev.exs 文件,找到下面这段配置:

# Configure your database
config :hello, Hello.Repo,
  username: "postgres",
  password: "postgres",
  hostname: "localhost",
  database: "hello_dev",
  stacktrace: true,
  show_sensitive_data_on_connection_error: true,
  pool_size: 10

如果使用的是MySQL数据库,配置如下:

# Configure your database
config :world, World.Repo,
  username: "root",
  password: "",
  hostname: "localhost",
  database: "hello_dev",
  stacktrace: true,
  show_sensitive_data_on_connection_error: true,
  pool_size: 10

我们需要根据实际情况来修改这里的配置,然后再执行 mix ecto.create ,如果你已经提前建好了数据库,那么这个命令也不必要执行。

接下来我们可以使用命令 mix phx.server 来启动服务了,默认端口是4000。如果你在创建应用时没有安装依赖,那么这里还会提示你去安装依赖,输入Y回车即可。

打开浏览器,输入localhost:4000,不出意外的话,你会看到Phoenix的欢迎页,那么恭喜你入坑Phoenix。虽然每个版本的Phoenix欢迎页可能都不太一样,但是你总能看到这样的画面。

Phoenix自带了热更新功能,服务启动后,Phoenix会自动监听文件变化并更新网页,Windows和Mac OS自带了这个功能,但是在Linux上,需要手动安装文件监视器才能生效,具体可参考 inotify-tools wiki

除了欢迎页,Phoenix在开发环境下还默认自带了一个监控后台。在浏览器输入localhost:4000/dev/dashboard,就可以看到监控看板了。

目录结构

在终端按下ctrl+c,然后输入Y停止服务。接下来我们简单介绍下Phoenix项目的目录结构,更详细的说明会在后面的教程中逐步完善。

_build 目录是存放编译结果的目录,不应该加入版本控制。

assets 目录是存放前端资源的目录,CSS,JS文件都在这里。

config 目录是配置文件存放目录,Phoenix的配置文件使用的是ELixir的脚本文件。

deps 目录是依赖存放目录。

lib 是服务主要代码的存放目录,包括路由,页面和业务逻辑等,也就是MVC都在这个目录下。

priv 也是各种资源文件的存放目录。 gettext 存放的是国际化相关文件; repo 下存放的是数据库变更脚本文件,注意这里的脚本不是 .sql 文件,而是 .exs 文件; assets 目录下的资源文件经过编译之后会放到 static 目录下。在 static 目录下也有一个 assets 目录,里面是css和js文件,还有一个 images 目录用来存放图片资源。

test 目录下是测试文件。

下面我们再看下 hello_web 这个目录,它的主要内容是MVC中的V和C。

components 目录是组件目录,所谓组件就是页面。

controllers 目录是控制器目录,但实际上它里面既有C也有V, page_html 下面放的其实就是HTML模板,你看到的欢迎页就是由 home.html.heex 渲染出来的。

hello_web 下还有一些其他文件,我们会在后面的教程中介绍它们的作用,以及如何编辑它们。


  • 25
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值