elixir mix开发入门
备注:
简单使用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
a. config
主要是对于不同环境的变量配置
b. lib
主要是我们自己的业务代码放置
c. mix.exs
应用运行的一些配置,包括依赖包,构建,运行的说明,后面会有doc 以及main 入口的参考例子
d. test
单元测试的代码
备注: 项目运行结构
├── 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"]
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
https://github.com/rongfengliang/elixir-dockerbuild
elixir mix开发入门的更多相关文章
- openresty 前端开发入门五之Mysql篇
openresty 前端开发入门五之Mysql篇 这章主要演示怎么通过lua连接mysql,并根据用户输入的name从mysql获取数据,并返回给用户 操作mysql主要用到了lua-resty-my ...
- java WEB开发入门
WEB开发入门 1 进入web JAVASE:标准- standard JAVA桌面程序 GUI SOCKET JAVAEE:企业-浏览器控制 web 2 软件结构 C/S :client ...
- [译]:Xamarin.Android开发入门——Hello,Android Multiscreen深入理解
原文链接:Hello, Android Multiscreen_DeepDive. 译文链接:Xamarin.Android开发入门--Hello,Android Multiscreen深入理解. 本 ...
- [译]:Xamarin.Android开发入门——Hello,Android深入理解
返回索引目录 原文链接:Hello, Android_DeepDive. 译文链接:Xamarin.Android开发入门--Hello,Android深入理解 本部分介绍利用Xamarin开发And ...
- [译]:Xamarin.Android开发入门——Hello,Android快速上手
返回索引目录 原文链接:Hello, Android_Quickstart. 译文链接:Xamarin.Android开发入门--Hello,Android快速上手 本部分介绍利用Xamarin开发A ...
- VR原理讲解及开发入门
本文是作者obuil根据多年心得专门为想要入门的VR开发者所写,由52VR网站提供支持. 1. VR沉浸感和交互作用产生的原理: 在之前,我们观看一个虚拟的创造内容是通过平面显示器的,52VR ...
- Eclipse_luna_J2EE_For_JS+tomcat8.0环境搭建、配置、开发入门
一.所有需要的软件.插件等下载地址 J2SE的官方下载路径:http://www.oracle.com/technetwork/java/javase/downloads/index.html Ecl ...
- OWIN的理解和实践(三) –Middleware开发入门
上篇我们谈了Host和Server的建立,但Host和Server无法产出任何有实际意义的内容,真正的内容来自于加载于Server的Middleware,本篇我们就着重介绍下Middleware的开发 ...
- [Cordova] Plugin开发入门
[Cordova] Plugin开发入门 Overview Cordova的设计概念,是在APP上透过Web控件来呈现Web页面,让Web开发人员可以操作熟悉的语言.工具来开发APP.使用Web页面来 ...
随机推荐
- 开发H5游戏引擎的选择:Egret或Laya?
开发H5游戏引擎的选择:Egret或Laya? 一.总结 一句话总结:选laya吧 二.开发H5游戏引擎的选择:Egret或Laya? 一.H5游戏开发的引擎介绍 开发H5游戏的引擎有很多,比如egr ...
- Oracle归档的开启和关闭
--1.开启归档 [步骤] a.一致性关闭数据库(shutdown [immediate | transactional |normal]) b.启动到mount阶段(startup mount) c ...
- kindeditor支持flv视频播放方法
打开plugins\media下面的media.js,打开,找到下面的代码: var html = K.mediaImg(self.themesPath + ‘common/blank.gif’, { ...
- program发展史及以后预测
三个阶段:第一个阶段是1950年代到1960年代,是程序设计阶段,基本是个体手工劳动的生产方式.这个时期,一个程序是为一个特定的目的而编制的,软件的通用性是很有限的,软件往往带有强烈的个人色彩.早期的 ...
- 获取CPU和内存的使用率
1.获取CPU的使用率 主要就是一个计算. int CUseRate::GetCPUUseRate() //获取CPU使用率 { ; FILETIME ftIdle, ftKernel, ftUser ...
- ActiveMQ教程(消息发送和接受)
一 环境的搭建 version为你的版本号 如果你是普通的项目的话,创建一个lib文件夹,导入相应的jar包到你的lib中,jar包为:activemq-all-{version}.jar.log4j ...
- hdu 6114 chess(排列组合)
Chess Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- LeetCode OJ:Sudoku Solver(数独游戏)
Write a program to solve a Sudoku puzzle by filling the empty cells. Empty cells are indicated by th ...
- 【WebGL】1.WebGL简介
OpenGL和WebGL基本概念 OPEN GL:一个跨编程语言.跨平台的编程接口规格的专业的图形程序接口.它用于三维图像(二维的亦可),是一个功能强大,调用方便的底层图形库. WebGL:一个3D ...
- 12.18 微信扫码获取openid与登陆
官方文档: https://open.weixin.qq.com/ 1.先获取code 1-1 配置项目配置文件 wechat: mpAppId: wxd898fcb01713c658 mpAppSe ...