【问题标题】:Howto distribute crystal-lang executable如何分发水晶语言可执行文件
【发布时间】:2017-12-21 23:01:11
【问题描述】:

你好水晶祭司,

我在我的开发虚拟机上构建了一个应用程序,势利小人,在 fedora26 上运行水晶 0.23.1。它在本地运行良好。这是一个发布版本。我将应用程序复制到我的主机 fedora27,并尝试运行它,我收到一个错误,抱怨 shard.yml。在我的任何 centos 机器上都会发生同样的情况。错误:

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] ???

我错过了什么?我的印象是这是一个独立的可执行文件。再多的挠头或谷歌搜索都不会出现任何问题。

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

【问题讨论】:

  • 没有源代码我无法回答这个问题。似乎有人在您的应用程序或它使用的碎片之一中编写了代码,这取决于 shard.yml。 Crystal 可执行文件通常是独立的,但可以编写一个不是的,这就是这里发生的事情。
  • 我仔细查看了我的源代码,发现在 version.cr 中包含对 shard.yml 的引用导致了问题。而不是:VERSION = "x.x.x" 我曾尝试使用VERSION = begin YAML.parse(File.read(File.join(__DIR__, "../..", "shard.yml")))["version"].as_s end 谢谢@RX14 的回复。
  • 用您找到的解决方案回答您自己的问题怎么样?然后问题就可以结束了。而且您的问题可能会在一段时间内频繁出现,所以一个好的解决方案可能会让爱好者感兴趣!

标签: crystal-lang


【解决方案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 的发帖建议。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-13
      • 1970-01-01
      相关资源
      最近更新 更多