Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

EPUBビルダでカスタムなページでエラー(Errno::ENOENT)になる #1913

Closed
Yuki-book opened this issue Jul 17, 2024 · 8 comments
Closed

Comments

@Yuki-book
Copy link

現象

EPUBビルダでカスタムなページ(プロファイルなど)を指定するとき階層ディレクトリで指定するとエラー(Errno::ENOENT)になる。

異常な場合

config.ymlのprofile:を以下のように変更する

# profile: null
   ↓
profile: content/html/profile.xhtml

EPUBビルドします。

$ rake epub
review-epubmaker  config.yml
/usr/lib/ruby/3.2.0/fileutils.rb:2291:in `initialize': 
No such file or directory @ rb_sysopen - 
/tmp/book-epub-20240716-957-810lrp/content/html/profile.xhtml (Errno::ENOENT)

正常な場合

config.ymlのprofile:を以下のように変更する

# profile: null
   ↓
profile: profile.xhtml

EPUBビルドします。

$ rake epub
review-epubmaker  config.yml
✔ SUCCESS built book.epub

エラーとなるケース

カスタムなページを指定するとき階層ディレクトリで指定するとエラー(Errno::ENOENT)になる。

すべての確認をしておりませんが、私が使用している下記ファイルで発生しました。

  • プロフィールページファイル profile:
  • 裏表紙データファイル backcover:
  • 広告ファイル advfile:

なお、Re:VIEW 3.2.0では正常に動作していました。

リリースの変更点を見たのですか、制限した記述も見つかりません。

Re:VIEW ナレッジベース

Re:VIEW ナレッジベースの記載は、ひとつの例で階層ディレクトリが使用できないとは読み取れません。

プロジェクトフォルダ(config.yml と同じフォルダ)に profile.xhtml という名前で保存しておき、これをプロフィールページとして使うように config.yml に設定します。

 profile: profile.xhtml

環境

Ubuntu 24.04 LTS (Windows11 Pro WSL2)にRe:VIEWを入れています。

$ review version
5.9.0

以上、よろしくお願いいたします。

@kdmsnr
Copy link
Collaborator

kdmsnr commented Jul 23, 2024

追いかけてみましたが、 5.1.0のときに #1670 で copy_static_fileメソッドが導入されたことで、サブディレクトリの指定は無効(エラー)になるようでした。仕様化されているわけではなさそうですけど、どうでしょうか。 > @kmuto

@kdmsnr
Copy link
Collaborator

kdmsnr commented Jul 23, 2024

pdfのほうを考えてませんが、epubのprofileだけ(他にもサブディレクトリを指定したいものはありそう)。

--- a/lib/review/epubmaker.rb
+++ b/lib/review/epubmaker.rb
@@ -527,8 +527,10 @@ module ReVIEW
       unless File.exist?(@config[configname])
         error! "#{configname}: #{@config[configname]} is not found."
       end
-      FileUtils.cp(@config[configname],
-                   File.join(destdir, destfilename), preserve: true)
+
+      destination = File.join(destdir, destfilename)
+      FileUtils.mkdir_p(File.dirname(destination))
+      FileUtils.cp(@config[configname], destination, preserve: true)
     end
 
     def copy_frontmatter(basetmpdir)
@@ -582,7 +584,8 @@ module ReVIEW
       if @config['profile']
         copy_static_file('profile', basetmpdir)
         @htmltoc.add_item(1,
-                          File.basename(@config['profile']),
+                          @config['profile'],
                           ReVIEW::I18n.t('profiletitle'),
                           chaptype: 'post')
       end

@kmuto
Copy link
Owner

kmuto commented Jul 26, 2024

遅くなりました(ここずっとめちゃ忙しい…)。
そしてなるほど…サブディレクトリは想定できていませんでした。
まぁまぁ範囲広そうですが、同じ感じで対処していく必要がありそうですね

@kmuto
Copy link
Owner

kmuto commented Jul 29, 2024

パスまわりで悩み中です。

たとえばcontent/html/profile.xhtml にした場合、@kdmsnr さんパッチのほうでやるとEPUB内パスもOEBPS/content/html/profile.xhtmlになりますよね。
画像参照や生成されたHTML本文へのリンクをしたいとして、画像はOEBPS/images下、生成HTMLはOEBPS直下にあります。
このとき、以下のどちらを期待してカスタムページファイルを配置するでしょうか。

  • A. content/html/profile.xhtmlはそのままフォルダ構造が維持されることを期待しており、profile.xhtmlの中で意識して「../../images/〜」のように相対リンクにしている
  • B. content/html/profile.xhtmlはほかのEPUB HTMLファイルと同様にOEBPS直下に置かれることを期待している。そのためprofile.xhtmlの中では「images/〜」と直下からの参照位置にしている

A挙動(パッチの方向)は、フォルダ構造的にほかの生成EPUB HTMLファイル群と一線を画すことになってなんとなく美しくない感じ(形だけでなく、将来的になんか嫌なことが起きそうな不吉感)があります。
B挙動にしようとすると、epubcommonなどあちこちでパスをそのまま使っているところがあって、手当てが必要そうです。

@Yuki-book
Copy link
Author

Re:VIEW 3.2.0では、B挙動でした。

profile.xhtmlの中では「images/〜」と直下からの参照位置にしている

この仕様がわかりやすいと思います。

.reや.xhtmlなどの原稿に関するファイルを特定のディレクトリにまとめたいわけです。

@kmuto
Copy link
Owner

kmuto commented Jul 30, 2024

やはりそうですよね。自分の感覚としてもBのほうが合っていました。対応実装を考えます

@kmuto
Copy link
Owner

kmuto commented Jul 30, 2024

#1914 対応作業に着手。各makerの対処とテストなど進めます

@kmuto
Copy link
Owner

kmuto commented Aug 1, 2024

#1914 にて修正してみました!

@kmuto kmuto closed this as completed Aug 1, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants