代码之家  ›  专栏  ›  技术社区  ›  Daniel Nunez

Travis CI构建失败:“bundle exec rake”命令退出,返回1

  •  0
  • Daniel Nunez  · 技术社区  · 6 年前

    特拉维斯·西是个新手。生成失败,原因为 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 回复  |  直到 6 年前
        1
  •  0
  •   Jyrki    6 年前

    如果阅读错误消息和堆栈跟踪,这里的问题就会变得更加清楚。 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 您的gem,这些目录将为您创建。克隆存储库并运行 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
    这样,您就不需要指定任何绝对路径或对目录布局进行假设,也不需要确保路径存在(因为源文件的目录及其父目录始终存在)。