私は Rake に関する Avdi Grimm のチュートリアル シリーズに取り組んでいますが、パート 6で行き詰まっています。Pandoc を呼び出すタスクは正常に動作しますが、Calibre のebook-convert
コマンドはステータス 127 を返します。
andrekibbe@Andres-MacBook rake_basics (master) $ rake
pandoc -o ch1.html ch1.md
pandoc -o ch2.html ch2.md
pandoc -o ch3.html ch3.md
pandoc -o subdir/appendix.html subdir/appendix.md
pandoc -o ch4.html ch4.markdown
cat ch1.html ch2.html ch3.html ch4.html > book.html
ebook-convert book.html book.epub
rake aborted!
Command failed with status (127): [ebook-convert book.html book.epub...]
/Users/andrekibbe/code/rake_basics/Rakefile:27:in `block in <top (required)>'
/Users/andrekibbe/.rvm/gems/ruby-2.2.1/bin/ruby_executable_hooks:15:in `eval'
/Users/andrekibbe/.rvm/gems/ruby-2.2.1/bin/ruby_executable_hooks:15:in `<main>'
Tasks: TOP => default => book.epub
ebook-convert
私のアプリケーションディレクトリのパスにある:/Applications/calibre.app/Contents/MacOS/calibre
、私のRakefileは/Users/andrekibbe/code/rake_basics
:
require "rake/clean"
SOURCE_FILES = Rake::FileList.new("**/*.md", "**/*.markdown") do |fl|
fl.exclude("~*")
fl.exclude(/^scratch\//)
fl.exclude do |f|
`git ls-files #{f}`.empty?
end
end
CLEAN.include(SOURCE_FILES.ext(".html"))
task default: ["book.epub", "book.mobi"]
task html: SOURCE_FILES.ext(".html")
rule ".html" => ->(f){source_for_html(f)} do |t|
sh "pandoc -o #{t.name} #{t.source}"
end
file "book.html" => SOURCE_FILES.ext(".html") do |t|
chapters = FileList["**/ch*.html"]
backmatter = FileList["backmatter/*.html"]
sh "cat #{chapters} #{backmatter} > #{t.name}"
end
CLEAN.include("book.html")
file "book.epub" => "book.html" do |t|
sh "ebook-convert book.html #{t.name}"
end
CLOBBER.include("book.epub")
file "book.mobi" => "book.epub" do |t|
sh "kindlegen book.epub -o #{t.name}"
end
CLOBBER.include("book.mobi")
def source_for_html(html_file)
SOURCE_FILES.detect{|f| f.ext('') == html_file.ext('')}
end
gem のように Rakefile で Calibre ツールを要求する方法や、絶対パスまたはシンボリック リンクを使用する方法はありますか? Avdi のコードにはそのようなものは何もないので、必要ではないと思います。または、Calibre を別の場所にインストールする必要がありますか?