`
acme_ltt
  • 浏览: 53702 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

rebar进行项目部署和热更

阅读更多

1、rebar安装(最好把rebar路径写到~/bashrc文件)

 

2、创建项目

    1、mkdir myapp

    2、cd myapp     

    3、rebar create-app appid=myapp

    4、编译rebar compile

 

3、发布版本

    1、mkdir apps

    2、mkdir apps/myapp

    3、将第二步得到的src文件cp到apps/myapp/src

    4、mkdir rel

    5、cd rel 

    6、rebar create-node nodeid=myapp (创建节点)

    7、创建rebar.config文件,内容如下:    

            {sub_dirs, ["apps/myapp","rel"]}.
            {cover_enabled, true}.
            {deps_dir,["deps"]}.    // 引入source code
            {deps,[
                {lager,".*",{git,"git://github.com/basho/lager.git",{branch,"master"}}}
            ]}.

    
    8、修改reltool.config文件

           {sys, [
       {lib_dirs, ["../apps", "../deps"]},   //lib所在的目录,source code保存在deps中,见上一步
       {rel, "myapp", "1",                   // “1” 表示版本号
        [
         kernel,
         stdlib,
         sasl,
         myapp
        ]},
       {rel, "start_clean", "",
        [
         kernel,
         stdlib
        ]},
       {boot_rel, "myapp"},
       {profile, embedded},
       {excl_archive_filters, [".*"]}, %% Do not archive built libs
       {excl_sys_filters, ["^bin/.*",
                           "^erts.*/bin/(dialyzer|typer)"]},
       %% Including HiPE can cause issues generating your first upgrade.
       %% If you plan to distribute HiPE in your release remove the
       %% following line.
       {app, lager, [{incl_cond, include}]},  // 引入的source code 必须要在此进行声明,不然不能识别
       {app, myapp, [{incl_cond, include}]}
      ]}.
       {target_dir, "myapp"}.
        {overlay, [
               {mkdir, "log/sasl"},  //  程序启动时候出现的错误,会记录在此
               {copy, "files/erl", "\{\{erts_vsn\}\}/bin/erl"},
               {copy, "files/nodetool", "\{\{erts_vsn\}\}/bin/nodetool"},
               {copy, "files/myapp", "bin/myapp"},
               {copy, "files/sys.config", "releases/\{\{rel_vsn\}\}/sys.config"},
               {copy, "files/myapp.cmd", "bin/myapp.cmd"},
               {copy, "files/start_erl.cmd", "bin/start_erl.cmd"},
               {copy, "files/vm.args", "releases/\{\{rel_vsn\}\}/vm.args"}
              ]}.

4、编译并生成release

    其实这个时候,来个Makefile更好

    .PHONY: deps
    .PHONY: rel
    all:deps compile
    deps:
        ./rebar get-deps   //这个命令会根据rebar.config中的配置,获得指定的source code并保存在指定的目录下,如deps
    clean:
        ./rebar clean
    compile: deps clean 
        ./rebar compile    // 没错,这个是编译的
    rel:compile
        ./rebar generate    //生成release

 

5、启动

    经过编译和生成release之后,可执行文件会在./rel/myapp/bin/myapp ,启动时,应该指定启动的模式。

 

6、热更

    BTW:热更之前备份。

    1、修改版本号,有两个文件,一个是myapp.app.src 另一个是reltool.config

    2、编译,rebar compile

    3、rebar generate

    4、rebar generate-appups previous_release=myapp_1 指定之前的版本是1    

    5、rebar generate-upgrade previous_release=myapp_1 

 

    6、mv rel/myapp_2.tar.gz rel/myapp_1/releases/

    7、

    (myapp@127.0.0.1)> release_handler:unpack_release("myapp_2").
    {ok,"2"}
    (myapp@127.0.0.1)> release_handler:install_release("2").
    {ok,"1",[]}
    (myapp@127.0.0.1)> release_handler:make_permanent("2").
    ok

 

主要参见:http://blog.sina.com.cn/s/blog_6530ad590100wmkn.html 

 

1、引入source code

    rebar提供了source 引入功能。

    1、一般用本身用rebar组织的source 项目,需要注意三个地方,第一,指定source code保存的目录,一般是deps;第二,指定source code 的地址,一般都是git 或者是hg;最后一点,在reltool.config文件要进行声明。例子可见3.8 。

    2、本身并不是用rebar组织的,如 rabbitmq erlang client 这种形式的,需要把rabbitmq erlang client的lib 和ebin放在 apps目录下(也就是和myapp是同一级目录),并在使用到该lib的代码中指定hrl所在的位置。-include_lib("apps/myapp ……").

 

2、sys.config文件 (系统配置文件)

    这个文件中,定义了如sasl snmp 等的启动参数

    [
     %% SASL config
     {sasl, [
         {sasl_error_logger, {file, "log/sasl-error.log"}},
         {errlog_type, error},
         {error_logger_mf_dir, "log/sasl"},      % Log directory
         {error_logger_mf_maxbytes, 10485760},   % 10 MB max file size
         {error_logger_mf_maxfiles, 5}           % 5 files max
        ]},
     {snmp,
        [{manager,
            [{config, [{dir, "../manager/conf/"},
                {db_dir, "../manager/db/"}]}]}]}
    ].

 

3、vm.args (虚拟机启动参数)

    这个文件,定义了Erlang虚拟机启动的参数

    ## Name of the node
    -name myapp@127.0.0.1 
    ## Cookie for distributed erlang
    -setcookie myapp

    ## Heartbeat management; auto-restarts VM if it dies or becomes unresponsive
    ## (Disabled by default..use with caution!)
    ##-heart
    ## Enable kernel poll and a few async threads
    ##+K true
    ##+A 5
    ## Increase number of concurrent ports/sockets
    ##-env ERL_MAX_PORTS 4096
    ## Tweak GC to run more often
    ##-env ERL_FULLSWEEP_AFTER 10

分享到:
评论

相关推荐

    rebar生成erlang release 并进行热代码升级

    如果你更倾向于使用Git来克隆rebar项目,可以通过下面的命令: ```bash git clone https://github.com/basho/rebar.git ``` ##### 第3步:创建一个OTP项目 一旦有了rebar文件,就可以通过它来创建一个新的Erlang ...

    Erlang应用部署与热代码替换--理解2

    2. **创建释放包**:使用`rebar3`或`escript`等工具,将编译后的beam文件、应用配置文件和应用描述文件(.app)打包成一个可部署的释放包(通常是一个.tar.gz文件)。 3. **部署到节点**:将释放包复制到目标Erlang...

    rebar3_clojerl:rebar3 Clojerl编译器插件

    `rebar3_clojerl` 插件就是这样的扩展,它使得 `rebar3` 能够理解和处理 `Clojure` 源代码,将其编译成 `Erlang` 可理解的形式,并将结果集成到 `Erlang` 项目中。这使得开发人员能够在同一个项目中混合使用 `Erlang...

    otp_win64_23.2.exe

    还有如rebar3和escript这样的构建和打包工具,便于项目的管理和部署。 总结来说,"otp_win64_23.2.exe"是Erlang OTP平台的Windows 64位版本,它包含了构建和运行高性能、分布式、容错系统所需的各种组件和库。...

    erlang-23.3.4.11-1.el7.x86-64.zip

    这个版本可能包含了Erlang运行时环境、编译器和其他必要的工具,如rebar3(Erlang项目的构建工具)。 了解这些知识点后,开发者可以更深入地掌握Erlang,并利用其优势构建高可用、高并发的应用程序。同时,熟悉...

    erlang 学习笔记1

    同时,Erlang社区提供了许多工具,如Rebar3和ERTS(Erlang Run-Time System),它们对于构建、测试和部署Erlang应用至关重要。 【压缩包子文件的文件名称列表】"rw_file"可能表示这个压缩包包含了一些关于读写文件...

    恐怖

    【标题】:“恐怖”可能指的是在编程领域中遇到的复杂...通过这些信息,我们可以了解到一个使用Erlang和OTP库的项目开发过程,包括使用Rebar3进行构建,利用GitHub Actions自动化流程,以及重视测试和代码质量管理。

    otp_releases

    7. **Erlang shell和调试工具**:如`rebar3`或`erlang.mk`构建工具,以及`observer`、`dbg`等调试工具的使用。 在实际应用中,掌握这些知识点可以帮助开发者构建高效、稳定的分布式系统,尤其是在高并发和容错性...

    server7:服务器编号 7

    部署通常涉及打包应用程序为tarball,然后在目标服务器上解压并使用erl或rebar3等工具进行安装和启动。监控方面,Erlang VM提供了如observer和vm_monitor等工具,可以帮助开发者了解系统性能、进程状态以及可能出现...

    aurora-server:Aurora是用Erlang编写的Android聊天服务器的工作名称

    10. **持续集成与部署**:对于Aurora这样的项目,持续集成与自动化部署流程至关重要。开发者可能使用如Jenkins或Travis CI等工具,确保代码的质量和版本控制,同时也便于快速迭代和发布新功能。 通过以上分析,我们...

Global site tag (gtag.js) - Google Analytics