如何分发水晶可执行文件

时间:2017-12-21 23:01:11

标签: crystal-lang

你好水晶牧师,

我已经在我的开发vm上运行了一个app,snob,在fedora26上运行水晶0.23.1。它在当地运行良好。这是一个发布版本。我将应用程序复制到我的主机,fedora27,并尝试运行它,我得到一个错误抱怨shard.yml。我的任何一台机器都会发生同样的情况。错误:

Error opening file 
'/vagrant/Projects/crystal/snob/src/snob/../../shard.yml' with mode 'r': No such file or directory (Errno)
Failed to raise an exception: END_OF_STACK
[0x40e807] __crystal_raise +375
[0x411f05] ???
[0x41f595] ???
[0x417291] ???
[0x41611a] ???
[0x42d37a] main +7914
[0x7f8783b5100a] __libc_start_main +234
[0x40e2da] _start +42
[0x0] ???

我错过了什么?我的印象是这是一个独立的可执行文件。没有任何头部刮擦或谷歌搜索任何东西。

提前感谢任何可以帮助我的人。与此同时,我还在寻找。

2 个答案:

答案 0 :(得分:1)

我在version.cr中的源代码: VERSION = begin YAML.parse(File.join(__DIR__, "../..", "shard.yml")))["version"].as_s end 我试图在开发过程中将版本保留在一个地方进行更新,并且无意中引入了不需要的错误。我的应用程序现在依赖于shard.yml位于我的路径某处。哎哟!将VERSION常量更改为文字字符串“x.x.x”并重建修复了该问题。我的来源位于https://github.com/lebogan/snob.git

感谢@Eric Platon发布帖子。

答案 1 :(得分:0)

使用Crystal v0.24.1和Shards v0.7.2我现在可以使用以下方法将版本保存在一个位置: VERSION = {{ `shards version #{__DIR__}`.chomp.stringify }} 这解决了我上面创建的问题。