Travis CI构建失败:命令“bundle exec rake”以1

时间:2018-03-21 18:02:44

标签: ruby build rubygems rake travis-ci

特拉维斯CI很新。使用The command "bundle exec rake" exited with 1.

构建失败

构建在我最近的更改之前传递,其中涉及使用Fileutils写入gem目录,所以我假设这是罪魁祸首。

我发现了这个:https://stackoverflow.com/a/40643667/9526393但仍然没有运气

有什么想法吗?

构建:https://travis-ci.org/AlphaDaniel/ruby_doc/builds/356485701?utm_source=github_status&utm_medium=notification

回购:https://github.com/AlphaDaniel/ruby_doc

    rake aborted!
Errno::ENOENT: No such file or directory @ rb_sysopen - /home/travis/build/AlphaDaniel/ruby_doc/vendor/bundle/ruby/2.2.0/gems/ruby_doc-2.2.0/favs.txt
/home/travis/build/AlphaDaniel/ruby_doc/config/environment.rb:23:in `<top (required)>'
/home/travis/build/AlphaDaniel/ruby_doc/Rakefile:5:in `require_relative'
/home/travis/build/AlphaDaniel/ruby_doc/Rakefile:5:in `<top (required)>'
/home/travis/.rvm/rubies/ruby-2.2.3/bin/bundle:30:in `block in <main>'
/home/travis/.rvm/rubies/ruby-2.2.3/bin/bundle:22:in `<main>'
Errno::ENOENT: No such file or directory @ utime_internal - /home/travis/build/AlphaDaniel/ruby_doc/vendor/bundle/ruby/2.2.0/gems/ruby_doc-2.2.0/favs.txt
/home/travis/build/AlphaDaniel/ruby_doc/config/environment.rb:23:in `<top (required)>'
/home/travis/build/AlphaDaniel/ruby_doc/Rakefile:5:in `require_relative'
/home/travis/build/AlphaDaniel/ruby_doc/Rakefile:5:in `<top (required)>'
/home/travis/.rvm/rubies/ruby-2.2.3/bin/bundle:30:in `block in <main>'
/home/travis/.rvm/rubies/ruby-2.2.3/bin/bundle:22:in `<main>'
(See full trace by running task with --trace)

1 个答案:

答案 0 :(得分:0)

如果您阅读错误消息和堆栈跟踪,则此处的问题会变得更加清晰。 Errno::ENOENT: No such file or directory基本上意味着Ruby无法找到特定的文件或目录,在您的情况下它是/home/travis/build/AlphaDaniel/ruby_doc/vendor/bundle/ruby/2.2.0/gems/ruby_doc-2.2.0/favs.txt。运行的最后一行代码是对FileUtils.touch的调用(在config/environment.rb:23中)。

您可能已经问过自己“但如果该文件尚不存在,是否应该创建此文件?”。答案是:是的,然而只有当父目录存在时才会出现。当您gem install宝石时,将为您创建这些目录。当您克隆存储库并运行rake时(这也是Travis在看到Ruby项目时自动为您做的事情),情况并非如此。

要解决这个问题,我建议您将fav_dir方法的主体更改为:

File.expand_path("../favs.txt", __dir__)

乍一看看起来有些神奇,但事实并非如此:__dir__是一个Ruby方法,它返回调用此方法的文件目录的绝对路径。在这种情况下,这将是例如/usr/home/foo/dev/ruby_doc/config。最后,File.expand_path允许我们解析相对路径,在这种情况下,最终结果将为/usr/home/foo/dev/ruby_doc/favs.txt 这样您就不需要指定任何绝对路径或对目录布局进行假设,并确保路径存在(因为源文件的目录及其父目录始终存在)。