4

我想使用Sync on-the-fly 重新编译使用 relx 组装的 Cowboy 项目(根据 Cowboy Getting Started Guide)。

问题是,即使我设法通过在 my_application.app.src 文件中的应用程序列表中提及同步来在我的应用程序中启动同步,如下所示:

{application, my_application, [
    {description, "My Cowboy Application"},
    {vsn, "0.1.0"},
    {modules, []},
    {registered, [my_app_sup]},
    {applications, [
        kernel,
        stdlib,
        cowboy,
        sync
    ]},
    {mod, {my_app, []}},
    {env, []}
]}.`

我仍然无法让它工作,因为 relx 汇编器没有将我的源代码移动到 _rel 目录(当然,它不应该)。

有什么方法可以告诉 Sync 我的源文件在哪里?或者我可能完全错了,必须以其他方式完成与 relx 的同步集成?

4

2 回答 2

6

我的同步开发设置包括:

  • 将同步安装到我导出的 ERL_LIBS 路径(即$HOME/lib/erlang
  • 创建一个开发 relx 配置并执行它relx -c relx-dev.config
  • 创建一个简单的 shell 脚本以 cd 进入控制台脚本所在的位置并执行它
  • 添加配置脚本来调整我的咆哮通知

开发时,我在我的开发 relx.config 文件中包含同步。但是,一旦我在目录中安装同步并将其导出到 ERL_LIBS,当我在任何 erlang 项目中启动同步应用程序时,它就会神奇地出现。

这是我的开发 relx-dev.config 文件的示例:

{dev_mode, true}.
{lib_dirs, ["/usr/local/erlang"]}.
{output_dir, "_rel-dev"}.
{release,
 {myapp, "0.0.1"},
 [{myapp_core, "0.0.1", '='}, sasl, syntax_tools, compiler, sync]
}.
{extended_start_script, true}.

创建 relx-dev.config 脚本后,我使用以下命令构建版本:

relx -c relx-dev.config

这是console我用来启动控制台的脚本:

#!/usr/bin/sh
_rel-dev/myapp/bin/myapp console

该脚本将启动一个带有节点名称的 erlang shell,启动我的所有应用程序和同步应用程序并加载自定义同步配置文件。

这是一个示例sync.config文件,位于您启动 shell 的同一目录中:

[{sync, [{growl, [errors, warnings]}]}].

同步自述文件有很多关于为控制台和咆哮配置日志记录行为的信息。使用.config文件的替代方法包括将选项传递给erl命令和在 shell 中执行同步函数。

于 2014-03-26T06:28:11.353 回答
1

如果我正确理解您的问题,您想要做的就是通过 relx 运行您的应用程序并让 Scan 获取您对源代码所做的任何更改。如果是这样,这就是你要做的。

当您运行 relx 命令时,添加 -d 选项。

./relx -d 真

这说的是 relx 将符号链接你所有的依赖而不是复制它们。这也使打包过程更快。从那里只需在 _rel 文件夹(或您将其输出到的任何位置)中运行您的应用程序并“同步”。

几点注意事项:

1)如果您不想对所有依赖项进行符号链接,则可以使用覆盖功能。但是我很懒惰,做一种全有或全无的方法:)

2) 在您的 relx.config 文件中,确保包含“编译器”和 syntax_tools 作为依赖项,否则每次编辑文件时扫描都会崩溃:(

如果有帮助,这是我的 relx.config 的副本

{paths, ["apps", "deps"]}.
{lib_dirs, ["/usr/local/lib/erlang/lib", "apps", "deps"]}.
{sys_config, "./config/sys.config"}.
{release, {merigo_chat, "1.0.0"}, [
kernel,
stdlib,
syntax_tools,
compiler,
sync,
{mySampleApp, "1.0.0"},

% Debugging applications,  Need to run observer and debugger from within the package
tools,
wx,
observer,
runtime_tools,
webtool,
appmon,
debugger
]}.

% Not you can skip the overrides if you use the -d option in relx
{overrides, [
{mySampleApp, "apps/mySampleApp"},
]}.
{extended_start_script, true}.
于 2014-04-12T09:22:15.077 回答