Erlang 速查表 v1.0

昨天下了个Erlang速查表,不过是英文的有点不习惯。百度了下居然没有其他的版本。今天脑抽把原本的pdf转为word后翻译,因为转换时格式出问题,所以最后直接搞成两页了。另外添加了些个人查到的一点资料。

原版:http://www.cheat-sheets.org/saved-copy/Erlang.CheatSheet(1.0).pdf


Erlang 速查表 v1.0

 

Variable变量  %注释 (大写字母开头)

Str = "John Doe".  % 字符串保存为整数列表.


% 打印输出值

io:format("Name is: ~s~n", [Str]).

io:fwrite("Name is: ~s~n", [Str]).

~n => 换行

~s => 参数是一个字符串、I/O列表或原子,打印时不带引号

~f => float浮点数

~w=>标准输出.类似 Object.toString().

~p=>类似 ~w 但会在每一行后中断(把参数打印为美观的形式)


List = [1,2,3,4].  % lists列表

NewList = [6, 7, List] 

返回[6,7, [1,2,3,4]]  %添加到新列表

> [H|T] = AList.

["a","b",{1,2,3}]  % 返回Head列表头和Tail列表尾. H和T都是没有绑定的变量.


Tuple = {1.0, 2.0, 3.0}

element(2, Tuple) 返回2.0 % 元组索引

{_, Second, _} = Tuple 保存2.0为变量Second % 模式匹配来检索一个值


列表和元祖能包含任意类型的数据.

> Atuple = {1,2,3}.

{1,2,3}

> AList = ["a", "b", Atuple].

["a","b",{1,2,3}]

> Anewtuple = {atom1, atom2, AList}.

{atom1,atom2,["a","b",{1,2,3}]


Function函数:

匿名函数:

F = fun(X) -> X end.  % F(10)打印10

命名函数:

method_name(Arg) ->

Arg.


% 对列表的每个元素都执行操作

> L = [1,2,3,4,5].

[1,2,3,4,5]

> lists:map(fun(X) -> 2*X end, L).  % 使用lists模块中的map方法

[2,4,6,8,10]

> [2*X || X <- L].  % 或者使用列表推导式

[2,4,6,8,10]


atom or ‘ATOM’ %原子由小写字母开头,否则加单引号


Macro宏:

-define(macro1, Replacement)

?macro1  %用这种方式使用宏 


Erlang Shell:

c(ModuleName)  % 编译模块

cd("dirname")  % 改变目录

f()  % 清空所有绑定

rr("records.hrl")  %读取一个record(记录)文件

rf(record_name)  %忘记record文件


Record记录:

-record(todo, {status=reminder,who=john,text}).

%创建该记录的实例

X = #todo{status=urgent}.

%使用模式匹配,从记录中提取值

#todo{status=S} = X.

X#todo.status  %%获取单个字段.


% ++是中缀插入操作符

> [1] ++ [2] ++ [3].

[1,2,3]

% X--Y是列表移除操作,它从 里移除 中的元素.


使用模式匹配/递归替换迭代.

total([{What,N|T}]) -> cost(What) * N + total(T);

total([]) -> 0.


File attributes模块属性 % -import, -export, -module

-module(modulename). %模块声明。必须是文件里的第一个属性。必须与文件名相同

-export([Func_a/0, Func_b/1]).  % 指定向外界导出的函数列表

-import(lists, [map/2]).  % 导入模块和方法列表

-compile(Options).     %设置编译选项,比如export_all 
-vsn(Vsn).         %模块版本,设置了此项,可以通过beam_lib:version/1 获取此项信息 

%% 可以通过-include-include_lib来包含文件,两者的区别是include-lib不能通过绝对路径查找文件,而是在你当前Erlanglib目录进行查找(注意: -record(...)-include(...) 有着类似的语法,但是不算模块属性)

-include(Filename).

-include_lib(Name).


case Expression of

Pattern1 [when Guard1] -> Expr_seq1;

Pattern2 [when Guard2] -> Expr_seq2

end.

来源:http://weblogs.asp.net/nleghari


翻译的pdf文档:http://download.youkuaiyun.com/detail/heybob/9612991


<think>我们正在处理用户查询:如何在离线环境下使用Docker安装RabbitMQ。根据用户要求,我们需要在离线环境中完成安装,因此不能依赖在线下载。通常,Docker离线安装需要预先下载镜像并传输到目标机器。参考引用内容:引用[1]提到:在Dockerfile中启用RabbitMQ插件(使用`rabbitmq-pluginsenable--offline`),这表明我们可以使用离线模式启用插件。引用[2]提到:用户遇到了版本冲突问题,建议使用docker安装,并注意版本对应关系。引用[3]提供了一些安装步骤,但主要是针对CentOS的rpm安装,不过其中提到了配置文件的处理,我们可以参考类似步骤在Docker中处理配置文件。步骤计划:1.在联网环境中下载RabbitMQ的Docker镜像,并导出为文件。2.将导出的镜像文件传输到离线环境。3.在离线环境中导入Docker镜像。4.创建自定义的Dockerfile(如果需要启用特定插件)或者直接运行容器,但注意在离线环境中启用插件需要使用`--offline`选项。5.准备配置文件(如果需要)并挂载到容器中。详细步骤:第一步:在联网机器上下载镜像并导出我们可以使用官方的RabbitMQ镜像,推荐使用带management标签的镜像,这样包含管理界面。例如:`dockerpullrabbitmq:3.9-management`(这里以3.9-management为例,具体版本用户可自选)导出镜像:```bashdockersave-orabbitmq.tarrabbitmq:3.9-management```将rabbitmq.tar文件复制到离线机器。第二步:在离线机器上导入镜像```bashdockerload-irabbitmq.tar```第三步:运行RabbitMQ容器如果不需要额外启用插件,可以直接运行:```bashdockerrun-d--namerabbitmq-p5672:5672-p15672:15672rabbitmq:3.9-management```但是,如果用户需要启用额外的插件(如MQTT、STOMP等),则需要在离线环境中启用这些插件。由于在容器内部运行`rabbitmq-pluginsenable`通常需要下载,但离线环境无法下载,因此我们需要在构建镜像时就启用插件(使用离线模式)。因此,我们可以创建一个Dockerfile来构建自定义镜像,在Dockerfile中使用`rabbitmq-pluginsenable--offline`命令。注意,这个命令必须在镜像中已经包含这些插件的情况下才能成功(官方提供的management镜像已经包含了很多插件,我们可以直接启用)。例如,我们创建一个Dockerfile,内容如下:```DockerfileFROMrabbitmq:3.9-managementRUNrabbitmq-pluginsenable--offlinerabbitmq_mqttrabbitmq_stomp```但是,在离线环境中如何构建这个镜像呢?我们需要在联网机器上构建好并导出。因此,调整步骤:在联网机器上:1.创建Dockerfile文件,内容如上。2.构建镜像:`dockerbuild-tmy-offline-rabbitmq.`3.导出镜像:`dockersave-omy-offline-rabbitmq.tarmy-offline-rabbitmq`将导出的文件复制到离线机器,然后导入:```bashdockerload-imy-offline-rabbitmq.tar```运行容器:```bashdockerrun-d--namerabbitmq-p5672:5672-p15672:15672my-offline-rabbitmq```如果需要自定义配置文件,可以在运行容器时挂载配置文件。例如,在主机上准备好配置文件`rabbitmq.conf`,然后运行:```bashdockerrun-d--namerabbitmq-p5672:5672-p15672:15672-v/path/to/rabbitmq.conf:/etc/rabbitmq/rabbitmq.confmy-offline-rabbitmq```注意:RabbitMQ的配置文件路径在容器内是`/etc/rabbitmq/rabbitmq.conf`(或者`.config`文件,取决于格式)。引用[3]中提到过配置文件的位置。关于配置文件:在引用[3]中提到了一个配置文件示例,位于`/usr/share/doc/rabbitmq-server-3.7.18/rabbitmq.config.example`,但在Docker镜像中,我们可以通过环境变量或挂载配置文件来配置。另外,如果用户需要其他插件,需要确保这些插件在基础镜像中已经存在(官方镜像的插件列表可以在DockerHub上查看)。如果基础镜像中没有,则需要自行下载插件并复制到镜像中(这需要额外步骤,在离线环境下更复杂,因此建议使用官方镜像中已有的插件)。总结步骤:1.在联网机器上:编写Dockerfile,构建包含所需插件(通过离线启用)的镜像,导出为tar文件。2.将tar文件传输到离线机器。3.在离线机器上导入镜像,运行容器,并可选挂载配置文件。注意:用户的问题是关于离线安装,因此我们假设用户已经将所需的文件(镜像tar包)转移到了离线环境。根据以上分析,我们给出回答。</think>### 离线环境下使用 Docker 安装 RabbitMQ 指南 在离线环境中安装 RabbitMQ 需通过 Docker 镜像的预下载和转移实现,以下是具体步骤: #### 1. **联网环境准备镜像** ```bash # 下载官方镜像(带管理界面) docker pull rabbitmq:3.9-management # 导出镜像为离线文件 docker save -o rabbitmq-offline.tar rabbitmq:3.9-management ``` 将生成的 `rabbitmq-offline.tar` 文件通过U盘或内网传输到离线服务器。 #### 2. **离线服务器加载镜像** ```bash # 加载离线镜像 docker load -i rabbitmq-offline.tar # 验证镜像 docker images | grep rabbitmq ``` #### 3. **启用插件(离线模式)** 创建 `Dockerfile` 启用必要插件(如 MQTT/STOMP): ```Dockerfile FROM rabbitmq:3.9-management RUN rabbitmq-plugins enable --offline \ rabbitmq_mqtt \ rabbitmq_stomp \ rabbitmq_management ``` > **注意**:`--offline` 参数是关键,避免运行时联网下载插件[^1]。 #### 4. **构建自定义镜像** ```bash docker build -t offline-rabbitmq:1.0 . ``` #### 5. **启动容器** ```bash docker run -d \ --name rabbitmq-offline \ -p 5672:5672 \ # AMQP 端口 -p 15672:15672 \ # 管理界面端口 offline-rabbitmq:1.0 ``` #### 6. **验证安装** ```bash # 检查容器状态 docker ps -f name=rabbitmq-offline # 查看已启用插件 docker exec rabbitmq-offline rabbitmq-plugins list ``` ### 关键配置说明 - **配置文件挂载**:如需自定义配置,在运行容器时挂载配置文件: ```bash -v /host/path/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf ``` 配置文件模板位置参考容器内路径:`/usr/share/doc/rabbitmq-server/rabbitmq.config.example`[^3]。 - **版本兼容性**:RabbitMQ 与 Erlang 版本需严格匹配,离线安装时建议使用官方验证的组合(如 rabbitmq:3.9-management 已包含兼容的 Erlang)[^2]。 ### 常见问题解决 - **插件启用失败**:确保基础镜像包含所需插件(management 镜像已预装常用插件)。 - **启动报错**:检查 `rabbitmq.config` 语法,JSON 格式需使用 `.conf` 扩展名[^3]。 - **端口冲突**:修改 `-p` 参数映射端口(如 `-p 25672:15672`)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值