备注:

简单使用mix 进行项目的生成,同时添加docker 构建支持

1. 生成项目

mix new mydemoproject

输出信息如下:

* creating README.md
* creating .formatter.exs
* creating .gitignore
* creating mix.exs
* creating config
* creating config/config.exs
* creating lib
* creating lib/mydemoproject.ex
* creating test
* creating test/test_helper.exs
* creating test/mydemoproject_test.exs Your Mix project was created successfully.
You can use "mix" to compile it, test it, and more: cd mydemoproject
mix test Run "mix help" for more commands. 项目结构如下: ├── README.md
├── config
│ └── config.exs
├── lib
│ └── mydemoproject.ex
├── mix.exs
└── test
├── mydemoproject_test.exs
└── test_helper.exs
 
2. 项目结构说明
a. config
主要是对于不同环境的变量配置
b. lib
主要是我们自己的业务代码放置
c. mix.exs
应用运行的一些配置,包括依赖包,构建,运行的说明,后面会有doc 以及main 入口的参考例子
d. test
单元测试的代码
 
3. 添加一些功能
备注: 项目运行结构

├── Dockerfile
├── README.md
├── config
│ └── config.exs
├── lib
│ ├── mydemoproject
│ │ └── run.ex
│ └── mydemoproject.ex
├── mix.exs
└── test
├── mydemoproject_test.exs
└── test_helper.exs a. docs (项目帮助文档) 添加依赖包 mix.exs defp deps do
[
{:ex_doc, "~> 0.14", only: :dev}
]
end 添加文档的描述 mix.exs def project do
[
app: :userlogin,
version: "0.1.0",
elixir: "~> 1.6",
start_permanent: Mix.env() == :prod,
deps: deps(),
package: package(),
docs: [extras: ["README.md"], # 文档的起始地址
main: "readme"]
]
end defp package do
%{maintainers: ["dalongrong"],
licenses: ["MIT"],
links: %{"GitHub" => "https://github.com/rongfengliang/elixir-dockerbuild"}}
end
b. 项目启动入口 mix.exs # 入口声明
def project do
[
app: :mydemoproject,
version: "0.1.0",
elixir: "~> 1.6",
start_permanent: Mix.env() == :prod,
escript: escriptconfig(),
package: package(),
docs: [extras: ["README.md"], # 文档的起始地址
main: "readme"],
deps: deps()
]
end # 入口定义
defp escriptconfig do
[ main_module: Mydemoproject.Start]
end lib/mydemoproject/run.ex defmodule Mydemoproject.Start do
def main(argv) do
IO.puts "hello world"
end
end c. docker 构建支持(使用的docker stage 构建,需要docker ce 17或者最新版本) # build stage
FROM elixir:1.6-alpine AS build-env
WORKDIR /app
COPY * /app/
RUN cd /app \
&& mix local.hex --force \
&& mix local.rebar --force \
&& mix deps.get \
&& mix deps.compile \
&& cp mydemoproject /tmp/ FROM erlang:20-alpine
WORKDIR /app
COPY --from=build-env /tmp/mydemoproject /app/mydemoproject
CMD ["./mydemoproject"]
https://github.com/rongfengliang/mydemoproject
 
4. 项目构建
a. 依赖下载
mix.deps.get
b. 构建
mix escript.build
c. 项目文档
mix docs
d. docker 构建
docker build -t mydemoproject .
e. 运行
local
./mydemoproject
docker
docker run -it mydemoproject ./mydemoproject
 
 
5. 参考资料
https://github.com/rongfengliang/elixir-dockerbuild
 
 
 
 
 

elixir mix开发入门的更多相关文章

  1. openresty 前端开发入门五之Mysql篇

    openresty 前端开发入门五之Mysql篇 这章主要演示怎么通过lua连接mysql,并根据用户输入的name从mysql获取数据,并返回给用户 操作mysql主要用到了lua-resty-my ...

  2. java WEB开发入门

    WEB开发入门 1 进入web JAVASE:标准- standard   JAVA桌面程序 GUI    SOCKET JAVAEE:企业-浏览器控制  web 2 软件结构 C/S :client ...

  3. [译]:Xamarin.Android开发入门——Hello,Android Multiscreen深入理解

    原文链接:Hello, Android Multiscreen_DeepDive. 译文链接:Xamarin.Android开发入门--Hello,Android Multiscreen深入理解. 本 ...

  4. [译]:Xamarin.Android开发入门——Hello,Android深入理解

    返回索引目录 原文链接:Hello, Android_DeepDive. 译文链接:Xamarin.Android开发入门--Hello,Android深入理解 本部分介绍利用Xamarin开发And ...

  5. [译]:Xamarin.Android开发入门——Hello,Android快速上手

    返回索引目录 原文链接:Hello, Android_Quickstart. 译文链接:Xamarin.Android开发入门--Hello,Android快速上手 本部分介绍利用Xamarin开发A ...

  6. VR原理讲解及开发入门

    本文是作者obuil根据多年心得专门为想要入门的VR开发者所写,由52VR网站提供支持.   1. VR沉浸感和交互作用产生的原理:   在之前,我们观看一个虚拟的创造内容是通过平面显示器的,52VR ...

  7. Eclipse_luna_J2EE_For_JS+tomcat8.0环境搭建、配置、开发入门

    一.所有需要的软件.插件等下载地址 J2SE的官方下载路径:http://www.oracle.com/technetwork/java/javase/downloads/index.html Ecl ...

  8. OWIN的理解和实践(三) –Middleware开发入门

    上篇我们谈了Host和Server的建立,但Host和Server无法产出任何有实际意义的内容,真正的内容来自于加载于Server的Middleware,本篇我们就着重介绍下Middleware的开发 ...

  9. [Cordova] Plugin开发入门

    [Cordova] Plugin开发入门 Overview Cordova的设计概念,是在APP上透过Web控件来呈现Web页面,让Web开发人员可以操作熟悉的语言.工具来开发APP.使用Web页面来 ...

随机推荐

  1. JavaScript Browser 对象 实例

    使用JavaScript来访问和控制浏览器对象实例. Window 对象 弹出一个警告框 弹出一个带折行的警告框 弹出一个确认框,并提醒访客点击的内容 弹出一个提示框 点击一个按钮时,打开一个新窗口 ...

  2. 网页上播放音频、视频Mp3,Mp4

    昨天在处理网页上播放音频mp3,视频mp4上用了一天的时间来比较各种方案,最终还是选择了HTML5的 标签,谷歌浏览器.IE浏览器对标签的支持都很好,火狐上需要安装quicktime插件,效果比较差. ...

  3. [nodejs]npm国内npm安装nodejs modules终极解决方案

    此方案用于设置代理和修改镜像地址都不能解决问题使用 1.npm root 确认node模块的根文件夹,全局要加-g. osx同样是此命令,先清除缓存. npm cache clean C:\Users ...

  4. 【51nod-1042】数字0-9的数量

    给出一段区间a-b,统计这个区间内0-9出现的次数.   比如 10-19,1出现11次(10,11,12,13,14,15,16,17,18,19,其中11包括2个1),其余数字各出现1次. Inp ...

  5. 通过ping 主机名,或者主机名对应的IP地址

    通过ping 主机名,或者主机名对应的IP地址: 如下图: 懵了吧? 但是你用 ping 主机名 -4

  6. HM安装和使用方法

    此文为学习JVET参考了HM的安装方法,转载自岳麓吹雪大牛的博客,膜拜. 早期的HM解决方案包含了7个工程:1. TAppCommon 2. TAppDecoder 3. TAppEncoder 4. ...

  7. js函数的伪重载

    这也是今天写东西是遇到的一个问题,导致我联想起了函数重载的问题. 在javascript中是没有函数重载机制的,对于用惯了java开发的同学可能就表示吃惊了,我屮艸芔茻,函数 没有重载?那怎么搞?!! ...

  8. 我也说说Emacs吧(2) - Emacs其实就是函数的组合

    Emacs本质上是函数的组合 从帮助上看emacs有何不同 Vim和Sublime Text等编辑器,本质上是一个编辑器. 比如我们看看vim的帮助,是这个风格的,比如我要看i命令的帮助: <i ...

  9. Keras 自定义层

    1.对于简单的定制操作,可以通过使用layers.core.Lambda层来完成.该方法的适用情况:仅对流经该层的数据做个变换,而这个变换本身没有需要学习的参数. # 切片后再分别进行embeddin ...

  10. BDD测试框架Spock概要

    前言 为了找到一个适合自己的.更具操作性的.以DDD为核心的开发方法,我最近一直在摸索如何揉合BDD与DDD.围绕这个目标,我找到了Impact Mapping → Cucumber → Spock ...