【发布时间】:2014-02-15 16:59:03
【问题描述】:
我的 gem 使用 Tidy HTML Validator 的本地副本。它在lib/tidy/tidy 中可用。我的测试在本地运行完美,但是在 Travis CI 上,我收到了 Tidy 找不到的错误。
Errno::ENOENT:
No such file or directory - tidy
代码如下所示:
stdin, stdout, stderr = Open3.popen3('tidy -quiet')
是否有限制或阻止执行本地可执行文件的东西?我还调用了 Jigsaw CSS Validator 的本地副本,它是一个 Java jar 文件,执行方式如下:
`java -jar css-validator.jar --output=soap12 file:#{uri}`
这在 Travis CI 上完美运行。 Open3会不会有问题?
这里是 GitHub 存储库的链接:https://github.com/jmuheim/headhunter 这是失败的 Travis CI 构建的链接:https://travis-ci.org/jmuheim/headhunter
更新
我已将执行外部java 可执行文件的代码重写为也使用Open3,它正在工作。所以问题与tidy有关。
为了进一步调试,我已将tidy 重命名为tidy2(以确保调用了真正需要的可执行文件),并在调用它之前添加了手册File.exist? 'tidy',因此如果它不能调用它会引发错误找不到。
Dir.chdir(VALIDATOR_DIR) do
raise "Could not find tidy in #{Dir.pwd}" unless File.exists? EXECUTABLE
# Docs for Tidy: http://tidy.sourceforge.net/docs/quickref.html
stdin, stdout, stderr = Open3.popen3("#{EXECUTABLE} -quiet")
# ...
end
文件肯定找到了,但是执行还是会出现这个错误。
1) Headhunter::HtmlValidator#validate returns a local response when calling the validator succeeds
Failure/Error: subject.validate('invalid.html', read_file('html_validator/invalid.html'))
Errno::ENOENT:
No such file or directory - tidy2
# ./lib/headhunter/html_validator.rb:20:in `block in validate'
# ./lib/headhunter/html_validator.rb:16:in `chdir'
# ./lib/headhunter/html_validator.rb:16:in `validate'
# ./spec/lib/headhunter/html_validator_spec.rb:9:in `block (4 levels) in <top (required)>'
# ./spec/lib/headhunter/html_validator_spec.rb:8:in `block (3 levels) in <top (required)>'
所以我现在唯一能猜到的就是权限问题吗?有没有办法使用 Travis CI 设置本地可执行文件的权限?
我还尝试像 cmets 中有人建议的那样将 tidy 放入 bin,但这似乎也没有改变任何事情。
【问题讨论】:
-
您可能需要指定可执行文件
Open3.popen3('lib/tidy/tidy -quiet')的绝对路径 -
将您的
tidybin 放入 gem 的bin/文件夹中。 -
我已经添加了有关该问题的更多信息。可能是权限问题?
标签: ruby executable executable-jar execution travis-ci