Partage
  • Partager sur Facebook
  • Partager sur Twitter

Ocra avec FxRuby

impossible d'empaqueter mon application

Sujet résolu
    28 avril 2021 à 8:24:42

    Bonjour,

    J'ai créé une application fenêtrée avec FxRuby. L'application fonctionne très bien quand j'exécute le fichier .rbw (que ce soit en ligne de commande ou en double cliquant sur ce fichier qui est associé à l'interpréteur ruby). Mon souci c'est que je souhaitais partager mon application, et un exécutable empaquetant tout ce dont j'ai besoin me semble plus adapté que de dire aux gens "installez ruby, les gems qui vont bien via le gemfile et exécutez le .rbw".

    J'ai essayé diverses variantes de la commande d'empaquetage ocra pour y intégrer tout ce dont j'ai besoin, et voici la dernière en date que j'ai testé (le --console est là pour que les erreurs d'exécution s'affichent dans mon invite de commandes quand je lance mon exécutable) :

    ocra --console --chdir-first --gem-full --add-all-core --gemfile Gemfile --output "PDF Assembler.exe" --icon Logo.64x64.ico --dll ruby_builtin_dlls\libssp-0.dll --dll ruby_builtin_dlls\libgmp-10.dll --dll ruby_builtin_dlls\libgcc_s_seh-1.dll --dll ruby_builtin_dlls\libwinpthread-1.dll pdfAssembler.rbw PdfAssemblerDatas.rb PdfAssemblerFile.rb PdfAssemblerFileRotationWindow.class.rbw PdfAssemblerMainWindow.class.rbw PdfAssemblerMdiWindow.class.rbw add.32x32.png arrow-down.32x32.png arrow-up.32x32.png copyright.16x16.png empty.32x32.png empty.64x64.png gears.35x32.png Logo.16x16.png Logo.64x64.png Logo_title.600x120.png rotation_0.128x128.png rotation_90.128x128.png rotation_180.128x128.png rotation_270.128x128.png

    Je précise que dans la ligne de commande, j'ai bien tous mes fichiers (toutes les images que j'utilise dans mon application et tous les fichiers ruby que j'appelle tout au long de son exécution), soit 6 fichiers ruby ou rubyw et 14 images png, je n'en ai pas oublié un seul.

    Il m'ouvre mon appli, normal, je joue un peu avec pour qu'il détecte bien tout ce que j'utilise dedans, puis quand j'ai fini je la ferme et l'empaquetage s'exécute :

    === Loading script to check dependencies
    === Attempting to trigger autoload of HexaPDF::Font::Type1::Font
    === Attempting to trigger autoload of HexaPDF::Font::Type1::PFBParser
    === Attempting to trigger autoload of HexaPDF::Font::Type1::AFMParser
    === Attempting to trigger autoload of HexaPDF::Layout::TextLayouter
    === Attempting to trigger autoload of HexaPDF::Layout::Frame
    === Attempting to trigger autoload of HexaPDF::Layout::TextBox
    === Attempting to trigger autoload of HexaPDF::Layout::ImageBox
    === Attempting to trigger autoload of HexaPDF::Font::Encoding::MacExpertEncoding
    === Attempting to trigger autoload of HexaPDF::Font::Encoding::SymbolEncoding
    === Attempting to trigger autoload of HexaPDF::Font::Encoding::ZapfDingbatsEncoding
    === Attempting to trigger autoload of HexaPDF::Font::Encoding::MacRomanEncoding
    === Attempting to trigger autoload of HexaPDF::Font::Encoding::DifferenceEncoding
    === Attempting to trigger autoload of HexaPDF::Font::Encoding::StandardEncoding
    === Attempting to trigger autoload of HexaPDF::Font::Encoding::WinAnsiEncoding
    === Attempting to trigger autoload of HexaPDF::FontLoader::FromConfiguration
    === Attempting to trigger autoload of HexaPDF::FontLoader::Standard14
    === Attempting to trigger autoload of HexaPDF::ImageLoader::PNG
    === Attempting to trigger autoload of HexaPDF::ImageLoader::PDF
    === Attempting to trigger autoload of HexaPDF::ImageLoader::JPEG
    === Attempting to trigger autoload of HexaPDF::Font::CMap::Writer
    === Attempting to trigger autoload of HexaPDF::Font::CMap::Parser
    === Attempting to trigger autoload of HexaPDF::Document::Images
    === Attempting to trigger autoload of HexaPDF::Document::Files
    === Attempting to trigger autoload of HexaPDF::Document::Fonts
    === Attempting to trigger autoload of HexaPDF::Composer
    === Attempting to trigger autoload of HexaPDF::Filter::PassThrough
    === Attempting to trigger autoload of HexaPDF::Filter::Encryption
    === Attempting to trigger autoload of HexaPDF::Filter::ASCIIHexDecode
    === Attempting to trigger autoload of HexaPDF::Filter::Crypt
    === Attempting to trigger autoload of HexaPDF::Filter::ASCII85Decode
    === Attempting to trigger autoload of HexaPDF::Filter::LZWDecode
    === Attempting to trigger autoload of HexaPDF::Filter::RunLengthDecode
    === Attempting to trigger autoload of HexaPDF::Content::GraphicObject::EndpointArc
    === Attempting to trigger autoload of HexaPDF::Content::GraphicObject::SolidArc
    === Attempting to trigger autoload of HexaPDF::Content::GraphicObject::Geom2D
    === Attempting to trigger autoload of HexaPDF::Content::GraphicObject::Arc
    === Attempting to trigger autoload of HexaPDF::Type::Annotation
    === Attempting to trigger autoload of HexaPDF::Type::FontType3
    === Attempting to trigger autoload of HexaPDF::Type::AcroForm
    === Attempting to trigger autoload of HexaPDF::Type::Action
    === Attempting to trigger autoload of HexaPDF::Type::EmbeddedFile
    === Attempting to trigger autoload of HexaPDF::Type::XRefStream
    === Attempting to trigger autoload of HexaPDF::Type::ObjectStream
    === Attempting to trigger autoload of HexaPDF::Type::ViewerPreferences
    === Attempting to trigger autoload of HexaPDF::Type::Names
    === Attempting to trigger autoload of HexaPDF::Type::FileSpecification
    === Attempting to trigger autoload of HexaPDF::Type::IconFit
    === Attempting to trigger autoload of HexaPDF::Type::Actions::GoTo
    === Attempting to trigger autoload of HexaPDF::Type::Actions::GoToR
    === Attempting to trigger autoload of HexaPDF::Type::Actions::Launch
    === Attempting to trigger autoload of HexaPDF::Type::Actions::URI
    === Attempting to trigger autoload of HexaPDF::Task::Optimize
    === Attempting to trigger autoload of HexaPDF::Task::Dereference
    === Attempting to trigger autoload of HexaPDF::Type::Annotations::Text
    === Attempting to trigger autoload of HexaPDF::Type::Annotations::Link
    === Attempting to trigger autoload of HexaPDF::Type::Annotations::Widget
    === Attempting to trigger autoload of HexaPDF::Encryption::SecurityHandler
    === Attempting to trigger autoload of HexaPDF::Encryption::ARC4
    === Attempting to trigger autoload of HexaPDF::Encryption::AES
    === Attempting to trigger autoload of HexaPDF::Encryption::FastARC4
    === Attempting to trigger autoload of HexaPDF::Encryption::RubyARC4
    === Attempting to trigger autoload of HexaPDF::Encryption::FastAES
    === Attempting to trigger autoload of HexaPDF::Encryption::RubyAES
    === Attempting to trigger autoload of HexaPDF::Encryption::Identity
    === Attempting to trigger autoload of HexaPDF::Encryption::StandardSecurityHandler
    === Attempting to trigger autoload of HexaPDF::Layout::Frame::SortedList
    === Attempting to trigger autoload of Geom2D::Segment
    === Attempting to trigger autoload of Geom2D::Algorithms
    === Attempting to trigger autoload of Geom2D::BoundingBox
    === Attempting to trigger autoload of Geom2D::Point
    === Attempting to trigger autoload of Geom2D::PolygonSet
    === Attempting to trigger autoload of Geom2D::VERSION
    === Attempting to trigger autoload of HexaPDF::Font::TrueType::Optimizer
    === Attempting to trigger autoload of HexaPDF::Font::TrueType::Font
    === Attempting to trigger autoload of HexaPDF::Font::TrueType::Subsetter
    === Attempting to trigger autoload of HexaPDF::Type::AcroForm::ChoiceField
    === Attempting to trigger autoload of HexaPDF::Type::AcroForm::SignatureField
    === Attempting to trigger autoload of HexaPDF::Type::AcroForm::Form
    === Attempting to trigger autoload of HexaPDF::Type::AcroForm::TextField
    === Attempting to trigger autoload of HexaPDF::Type::AcroForm::ButtonField
    === Attempting to trigger autoload of HexaPDF::Font::TrueType::Table::Hmtx
    === Attempting to trigger autoload of HexaPDF::Font::TrueType::Table::Loca
    === Attempting to trigger autoload of HexaPDF::Font::TrueType::Table::Maxp
    === Attempting to trigger autoload of HexaPDF::Font::TrueType::Table::Post
    === Attempting to trigger autoload of HexaPDF::Font::TrueType::Table::Glyf
    === Attempting to trigger autoload of HexaPDF::Font::TrueType::Table::OS2
    === Attempting to trigger autoload of HexaPDF::Font::TrueType::Table::Kern
    === Attempting to trigger autoload of HexaPDF::Font::TrueType::Table::Name
    === Attempting to trigger autoload of HexaPDF::Font::TrueType::Table::Directory
    === Attempting to trigger autoload of HexaPDF::Font::TrueType::Table::Head
    === Attempting to trigger autoload of HexaPDF::Font::TrueType::Table::Cmap
    === Attempting to trigger autoload of HexaPDF::Font::TrueType::Table::Hhea
    === Attempting to trigger autoload of Geom2D::Algorithms::PolygonOperation
    === Scanning Gemfile
    === Detected gem bundler-2.2.16 (scripts, files, extras)
    ===     2 files, 1572 bytes
    === Detected gem cmdparse-3.0.7 (scripts, files, extras)
    ===     22 files, 205315 bytes
    === Detected gem mini_portile2-2.5.0 (scripts, files, extras)
    ===     44 files, 83238 bytes
    === Detected gem fxruby-1.6.44-x64-mingw32 (scripts, files, extras)
    ===     1386 files, 90664359 bytes
    === Detected gem geom2d-0.3.1 (scripts, files, extras)
    ===     35 files, 94459 bytes
    === Detected gem hexapdf-0.15.0 (scripts, files, extras)
    ===     701 files, 7189400 bytes
    === Detected gem ocra-1.3.11 (scripts, files, extras)
    ===     12 files, 347630 bytes
    === Detected gem fiddle-1.0.6 (scripts, files, extras)
    ===     0 files, 0 bytes
    === Detected gem did_you_mean-1.5.0 (scripts, files, extras)
    ===     0 files, 0 bytes
    === Detected gem tsort-0.1.0 (scripts, files, extras)
    ===     0 files, 0 bytes
    === Detected gem uri-0.10.1 (scripts, files, extras)
    ===     0 files, 0 bytes
    === Detected gem stringio-3.0.0 (scripts, files, extras)
    ===     0 files, 0 bytes
    === Detected gem date-3.1.0 (scripts, files, extras)
    ===     0 files, 0 bytes
    === Detected gem time-0.1.0 (scripts, files, extras)
    ===     0 files, 0 bytes
    === Detected gem strscan-3.0.0 (scripts, files, extras)
    ===     0 files, 0 bytes
    === Detected gem digest-3.0.0 (scripts, files, extras)
    ===     0 files, 0 bytes
    === Detected gem delegate-0.2.0 (scripts, files, extras)
    ===     0 files, 0 bytes
    === Detected gem weakref-0.1.1 (scripts, files, extras)
    ===     0 files, 0 bytes
    === Detected gem io-wait-0.1.0 (scripts, files, extras)
    ===     0 files, 0 bytes
    === Detected gem zlib-1.1.0 (scripts, files, extras)
    ===     0 files, 0 bytes
    === Detected gem forwardable-1.3.2 (scripts, files, extras)
    ===     0 files, 0 bytes
    === Detected gem set-1.0.1 (scripts, files, extras)
    ===     0 files, 0 bytes
    === Detected gem securerandom-0.1.0 (scripts, files, extras)
    ===     0 files, 0 bytes
    === Detected gem openssl-2.2.0 (scripts, files, extras)
    ===     0 files, 0 bytes
    === Detected gem io-nonblock-0.1.0 (scripts, files, extras)
    ===     0 files, 0 bytes
    === Detected gem ipaddr-1.2.2 (scripts, files, extras)
    ===     0 files, 0 bytes
    === Detected gem pathname-0.1.0 (scripts, files, extras)
    ===     0 files, 0 bytes
    === Including 61 encoding support files (3644416 bytes, use --no-enc to exclude)
    === Will include all ruby core libraries
    === Building PDF Assembler.exe
    === Adding user-supplied source files
    === Adding ruby executable ruby.exe
    === Adding detected DLL C:/Ruby30-x64/lib/ruby/gems/3.0.0/gems/fxruby-1.6.44-x64-mingw32/ports/x86_64-w64-mingw32/bin/libfxscintilla-20.dll
    === Adding detected DLL C:/Ruby30-x64/lib/ruby/gems/3.0.0/gems/fxruby-1.6.44-x64-mingw32/ports/x86_64-w64-mingw32/bin/libFOX-1.6-0.dll
    === Adding detected DLL C:/Ruby30-x64/lib/ruby/gems/3.0.0/gems/fxruby-1.6.44-x64-mingw32/ports/x86_64-w64-mingw32/bin/libstdc++-6.dll
    === Adding detected DLL C:/Ruby30-x64/lib/ruby/gems/3.0.0/gems/fxruby-1.6.44-x64-mingw32/ports/x86_64-w64-mingw32/bin/libjpeg-62.dll
    === Adding detected DLL C:/Ruby30-x64/lib/ruby/gems/3.0.0/gems/fxruby-1.6.44-x64-mingw32/ports/x86_64-w64-mingw32/bin/libpng16-16.dll
    === Adding detected DLL C:/Ruby30-x64/lib/ruby/gems/3.0.0/gems/fxruby-1.6.44-x64-mingw32/ports/x86_64-w64-mingw32/bin/libtiff-5.dll
    === Adding detected DLL C:/Ruby30-x64/bin/ruby_builtin_dlls/libssl-1_1-x64.dll
    === Adding detected DLL C:/Ruby30-x64/bin/ruby_builtin_dlls/libcrypto-1_1-x64.dll
    === Adding external manifest C:/Ruby30-x64/bin/ruby_builtin_dlls/ruby_builtin_dlls.manifest
    === Adding supplied DLL ruby_builtin_dlls\libssp-0.dll
    === Adding supplied DLL ruby_builtin_dlls\libgmp-10.dll
    === Adding supplied DLL ruby_builtin_dlls\libgcc_s_seh-1.dll
    === Adding supplied DLL ruby_builtin_dlls\libwinpthread-1.dll
    === Adding library files
    === Compressing 135608448 bytes
    
    LZMA 19.00 (x86) : Igor Pavlov : Public domain : 2019-02-21
    
    Input size:  135608448 (129 MiB)
    Output size: 18090838 (17 MiB)
    === Finished building PDF Assembler.exe (18158442 bytes)

    Il me détecte bien mes deux gems (FxRuby et HexaPDF) et empaquète bien mon application sans erreur.

    Mais quand j'essaie de lancer mon exécutable nouvellement généré, et grâce au --console, j'ai cette belle erreur :

    <internal:C:/Users/sphin/AppData/Local/Temp/ocr3BE0.tmp/lib/ruby/site_ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in `require': 126: Le module spÚcifiÚ est introuvable.   - C:/Users/sphin/AppData/Local/Temp/ocr3BE0.tmp/lib/ruby/gems/3.0.0/gems/fxruby-1.6.44-x64-mingw32/lib/3.0/fox16_c.so (LoadError)
    from <internal:C:/Users/sphin/AppData/Local/Temp/ocr3BE0.tmp/lib/ruby/site_ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
    from C:/Users/sphin/AppData/Local/Temp/ocr3BE0.tmp/lib/ruby/gems/3.0.0/gems/fxruby-1.6.44-x64-mingw32/lib/fox16.rb:27:in `block in <top (required)>'
    from C:/Users/sphin/AppData/Local/Temp/ocr3BE0.tmp/lib/ruby/gems/3.0.0/gems/fxruby-1.6.44-x64-mingw32/lib/fox16.rb:16:in `rescue in block in <top (required)>'
    from C:/Users/sphin/AppData/Local/Temp/ocr3BE0.tmp/lib/ruby/gems/3.0.0/gems/fxruby-1.6.44-x64-mingw32/lib/fox16.rb:10:in `block in <top (required)>'
    from C:/Users/sphin/AppData/Local/Temp/ocr3BE0.tmp/lib/ruby/gems/3.0.0/gems/fxruby-1.6.44-x64-mingw32/lib/fox16.rb:26:in `rescue in <top (required)>'
    from C:/Users/sphin/AppData/Local/Temp/ocr3BE0.tmp/lib/ruby/gems/3.0.0/gems/fxruby-1.6.44-x64-mingw32/lib/fox16.rb:1:in `<top (required)>'
    from <internal:C:/Users/sphin/AppData/Local/Temp/ocr3BE0.tmp/lib/ruby/site_ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:160:in `require'
    from <internal:C:/Users/sphin/AppData/Local/Temp/ocr3BE0.tmp/lib/ruby/site_ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:160:in `rescue in require'
    from <internal:C:/Users/sphin/AppData/Local/Temp/ocr3BE0.tmp/lib/ruby/site_ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:149:in `require'
    from C:/Users/sphin/AppData/Local/Temp/ocr3BE0.tmp/src/pdfAssembler.rbw:11:in `<main>'
    <internal:C:/Users/sphin/AppData/Local/Temp/ocr3BE0.tmp/lib/ruby/site_ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in `require': 126: Le module spÚcifiÚ est introuvable. - C:/Users/sphin/AppData/Local/Temp/ocr3BE0.tmp/lib/ruby/3.0.0/x64-mingw32/fiddle.so (LoadError)
    from <internal:C:/Users/sphin/AppData/Local/Temp/ocr3BE0.tmp/lib/ruby/site_ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
    from C:/Users/sphin/AppData/Local/Temp/ocr3BE0.tmp/lib/ruby/3.0.0/fiddle.rb:3:in `<top (required)>'
    from <internal:C:/Users/sphin/AppData/Local/Temp/ocr3BE0.tmp/lib/ruby/site_ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
    from <internal:C:/Users/sphin/AppData/Local/Temp/ocr3BE0.tmp/lib/ruby/site_ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
    from C:/Users/sphin/AppData/Local/Temp/ocr3BE0.tmp/lib/ruby/site_ruby/3.0.0/ruby_installer/runtime/dll_directory.rb:1:in `<top (required)>'
    from <internal:C:/Users/sphin/AppData/Local/Temp/ocr3BE0.tmp/lib/ruby/site_ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
    from <internal:C:/Users/sphin/AppData/Local/Temp/ocr3BE0.tmp/lib/ruby/site_ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
    from C:/Users/sphin/AppData/Local/Temp/ocr3BE0.tmp/lib/ruby/site_ruby/3.0.0/ruby_installer/runtime/singleton.rb:12:in `add_dll_directory'
    from C:/Users/sphin/AppData/Local/Temp/ocr3BE0.tmp/lib/ruby/gems/3.0.0/gems/fxruby-1.6.44-x64-mingw32/lib/fox16.rb:12:in `block in <top (required)>'
    from C:/Users/sphin/AppData/Local/Temp/ocr3BE0.tmp/lib/ruby/gems/3.0.0/gems/fxruby-1.6.44-x64-mingw32/lib/fox16.rb:26:in `rescue in <top (required)>'
    from C:/Users/sphin/AppData/Local/Temp/ocr3BE0.tmp/lib/ruby/gems/3.0.0/gems/fxruby-1.6.44-x64-mingw32/lib/fox16.rb:1:in `<top (required)>'
    from <internal:C:/Users/sphin/AppData/Local/Temp/ocr3BE0.tmp/lib/ruby/site_ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:160:in `require'
    from <internal:C:/Users/sphin/AppData/Local/Temp/ocr3BE0.tmp/lib/ruby/site_ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:160:in `rescue in require'
    from <internal:C:/Users/sphin/AppData/Local/Temp/ocr3BE0.tmp/lib/ruby/site_ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:149:in `require'
    from C:/Users/sphin/AppData/Local/Temp/ocr3BE0.tmp/src/pdfAssembler.rbw:11:in `<main>'
    <internal:C:/Users/sphin/AppData/Local/Temp/ocr3BE0.tmp/lib/ruby/site_ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in `require': cannot load such file -- fox16_c (LoadError)
    from <internal:C:/Users/sphin/AppData/Local/Temp/ocr3BE0.tmp/lib/ruby/site_ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
    from C:/Users/sphin/AppData/Local/Temp/ocr3BE0.tmp/lib/ruby/gems/3.0.0/gems/fxruby-1.6.44-x64-mingw32/lib/fox16.rb:2:in `<top (required)>'
    from <internal:C:/Users/sphin/AppData/Local/Temp/ocr3BE0.tmp/lib/ruby/site_ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:160:in `require'
    from <internal:C:/Users/sphin/AppData/Local/Temp/ocr3BE0.tmp/lib/ruby/site_ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:160:in `rescue in require'
    from <internal:C:/Users/sphin/AppData/Local/Temp/ocr3BE0.tmp/lib/ruby/site_ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:149:in `require'
    from C:/Users/sphin/AppData/Local/Temp/ocr3BE0.tmp/src/pdfAssembler.rbw:11:in `<main>'
    <internal:C:/Users/sphin/AppData/Local/Temp/ocr3BE0.tmp/lib/ruby/site_ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in `require': cannot load such file -- fox16 (LoadError)
    from <internal:C:/Users/sphin/AppData/Local/Temp/ocr3BE0.tmp/lib/ruby/site_ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
    from C:/Users/sphin/AppData/Local/Temp/ocr3BE0.tmp/src/pdfAssembler.rbw:11:in `<main>'

    Les premières lignes utiles de mon application (donc dans le fichier de lancement) sont l'inclusion des modules dont dépend mon application :

    require "fox16"
    require "hexapdf"
    include Fox

    avant l'inclusion de mes différents fichiers de classes suivi enfin par la boucle principale de mon application.

    Alors je ne suis pas forcément attaché à Ocra (que je n'ai jamais réussi à faire fonctionner avec FxRuby) mais si il existe un moyen, avec Ocra ou n'importe quel autre module, d'empaqueter mon application dans un exécutable intégrant ruby (pour ne pas en faire un prérequis au téléchargement de mon programme), je suis prenneur. J'ai la dernière version stable de ruby que j'ai pu trouvé :

    ruby 3.0.0p0 (2020-12-25 revision 95aff21468) [x64-mingw32]

    Mon Gemfile :

    # frozen_string_literal: true
    
    source "http://rubygems.org"
    git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
    
    # gem "rails"
    
    gem "fxruby", "~> 1.6"
    gem "hexapdf", "~> 0.15.0"
    gem "ocra", "~> 1.3"
    

    Et ma version d'Ocra (qui est aussi dans mon Gemfile, puisque c'est une dépendance de mon application pour l'empaquetage) :

    Ocra 1.3.11

    J'ai ouvert une issue sur le Github d'Ocra, pour laquelle je n'ai aucune réponse à ce jour (après deux semaines presque), et j'ai également recherché longuement ocra + fxruby sur google, sans rien trouver non plus pour faire fonctionner ensemble ces deux là...

    Bref, je cherche une solution efficace pour empaqueter mon application ruby en un exécutable standalone que je pourrai partager plus facilement, avec Ocra ou n'importe quoi d'autre.

    Merci pour l'aide que vous pourrez m'apporter :)

    • Partager sur Facebook
    • Partager sur Twitter

    Hier est derrière ; Demain est un mystère ; Aujourd'hui est un cadeau : c'est pourquoi on l'appelle le Présent. [Maître Oogway]

      29 avril 2021 à 12:50:10

      il ne manquerait pas fox16 dans ton gemfile ? il est dans ton code, mais pas dans ton gemfile
      • Partager sur Facebook
      • Partager sur Twitter
        29 avril 2021 à 18:05:04

        Fox16, c'est FxRuby en fait
        • Partager sur Facebook
        • Partager sur Twitter

        Hier est derrière ; Demain est un mystère ; Aujourd'hui est un cadeau : c'est pourquoi on l'appelle le Présent. [Maître Oogway]

          29 avril 2021 à 18:38:11

          dans un des sujets sur un problème similaire avec net-ssh (https://githubmemory.com/repo/larsch/ocra/issues/171 ), la réponse est d'inclure tout les built-in via:

          ocra example.rb --output example.exe --dll ruby_builtin_dlls\*.dll

          (juste rajouter la dernière partie à ta ligne de commande)

          Une autre réponse (que tu as peut-être vu) https://github.com/larskanis/fxruby/issues/50 (réinstaller fxruby, mais je doute que ça résolve le problème dans ton cas, vu que ton soft fonctionne via ruby)

          • Partager sur Facebook
          • Partager sur Twitter
            30 avril 2021 à 8:49:03

            Merci pour ces infos :) Réinstaller FxRuby n'a pas résolu mon problème (j'étais sur un ruby 2 avant, j'ai tout désinstallé et réinstallé ruby 3, donc j'ai réinstallé aussi les 2 gems de mon programme)

            Du coup j'ai tenté d'utiliser les deux commandes suivantes :

            D'abord : ocra --console --chdir-first --gem-full --add-all-core --gemfile Gemfile --output "PDF Assembler.exe" --icon Logo.64x64.ico --dll ruby_builtin_dlls\*.dll pdfAssembler.rbw PdfAssemblerDatas.rb PdfAssemblerFile.rb PdfAssemblerFileRotationWindow.class.rbw PdfAssemblerMainWindow.class.rbw PdfAssemblerMdiWindow.class.rbw add.32x32.png arrow-down.32x32.png arrow-up.32x32.png copyright.16x16.png empty.32x32.png empty.64x64.png gears.35x32.png Logo.16x16.png Logo.64x64.png Logo_title.600x120.png rotation_0.128x128.png rotation_90.128x128.png rotation_180.128x128.png rotation_270.128x128.png

            Puis : ocra --console --chdir-first --gem-full --add-all-core --gemfile Gemfile --output "PDF Assembler.exe" --icon Logo.64x64.ico --dll ruby_builtin_dlls/*.dll pdfAssembler.rbw PdfAssemblerDatas.rb PdfAssemblerFile.rb PdfAssemblerFileRotationWindow.class.rbw PdfAssemblerMainWindow.class.rbw PdfAssemblerMdiWindow.class.rbw add.32x32.png arrow-down.32x32.png arrow-up.32x32.png copyright.16x16.png empty.32x32.png empty.64x64.png gears.35x32.png Logo.16x16.png Logo.64x64.png Logo_title.600x120.png rotation_0.128x128.png rotation_90.128x128.png rotation_180.128x128.png rotation_270.128x128.png

            Mais dans les deux cas il me crache une erreur (la même) :

            === Adding supplied DLL ruby_builtin_dlls/*.dll
            C:/Ruby30-x64/lib/ruby/gems/3.0.0/gems/ocra-1.3.11/bin/ocra:1188:in `initialize': Invalid argument @ rb_sysopen - C:/Ruby30-x64/bin/ruby_builtin_dlls/*.dll (Errno::EINVAL)
                    from C:/Ruby30-x64/lib/ruby/gems/3.0.0/gems/ocra-1.3.11/bin/ocra:1188:in `open'
                    from C:/Ruby30-x64/lib/ruby/gems/3.0.0/gems/ocra-1.3.11/bin/ocra:1188:in `createfile'
                    from C:/Ruby30-x64/lib/ruby/gems/3.0.0/gems/ocra-1.3.11/bin/ocra:938:in `block (2 levels) in build_exe'
                    from C:/Ruby30-x64/lib/ruby/gems/3.0.0/gems/ocra-1.3.11/bin/ocra:936:in `each'
                    from C:/Ruby30-x64/lib/ruby/gems/3.0.0/gems/ocra-1.3.11/bin/ocra:936:in `block in build_exe'
                    from C:/Ruby30-x64/lib/ruby/gems/3.0.0/gems/ocra-1.3.11/bin/ocra:1087:in `block in initialize'
                    from C:/Ruby30-x64/lib/ruby/gems/3.0.0/gems/ocra-1.3.11/bin/ocra:1071:in `open'
                    from C:/Ruby30-x64/lib/ruby/gems/3.0.0/gems/ocra-1.3.11/bin/ocra:1071:in `initialize'
                    from C:/Ruby30-x64/lib/ruby/gems/3.0.0/gems/ocra-1.3.11/bin/ocra:879:in `new'
                    from C:/Ruby30-x64/lib/ruby/gems/3.0.0/gems/ocra-1.3.11/bin/ocra:879:in `build_exe'
                    from C:/Ruby30-x64/lib/ruby/gems/3.0.0/gems/ocra-1.3.11/bin/ocra:1231:in `block in <top (required)>'

            Le \*.dll et /*.dll, il n'aime pas, mais du coup je vais tenter de les inclure toutes, une par une, car ca résoudra peut-être quand même mon problème. Je vous tiens au courant ;)

            ___________________________________________________________________________________________

            Edit 9h14 : En incluant une à une toutes les DLL de mon dossier C:\Ruby30-x64\bin\ruby_builtin_dlls, ca marche !!! Merci mille fois :) Car ca faisait un moment que je bataillais dessus !

            Pour tous ceux qui rencontreraient le même problème, voici la commande que j'ai utilisé pour empaqueter mon application :

            ocra --console --chdir-first --gem-full --add-all-core --gemfile Gemfile --output "PDF Assembler.exe" --icon Logo.64x64.ico --dll ruby_builtin_dlls\libcrypto-1_1-x64.dll --dll ruby_builtin_dlls\libffi-7.dll --dll ruby_builtin_dlls\libgcc_s_seh-1.dll --dll ruby_builtin_dlls\libgdbm-6.dll --dll ruby_builtin_dlls\libgdbm_compat-4.dll --dll ruby_builtin_dlls\libgmp-10.dll --dll ruby_builtin_dlls\libiconv-2.dll --dll ruby_builtin_dlls\libintl-8.dll --dll ruby_builtin_dlls\libssl-1_1-x64.dll --dll ruby_builtin_dlls\libssp-0.dll --dll ruby_builtin_dlls\libwinpthread-1.dll --dll ruby_builtin_dlls\libyaml-0-2.dll --dll ruby_builtin_dlls\zlib1.dll [suivi de tous les fichiers de mon application]

            Pour être exact, la liste des dll à inclure est donc le contenu du dossier bin/ruby_builtin_dlls contenu dans le dossier où est installé votre ruby (je suppose que la liste des DLL peut varier d'une version à l'autre, donc certaines pourraient ne plus exister ou être dans la même version et d'autres pourraient se rajouter).

            Maintenant que je sais que ca ca marche, je vais tenter des essais pour alléger un peu mon paquet (en supprimant certaines options/dll une à une et voir lesquelles sont indispensables pour que mon exécutable fonctionne), et si certaines DLL ne sont pas indispensables pour empaqueter du FxRuby, je vous le dirai ;)

            ___________________________________________________________________________________________

            Edit 11h44 : Après plusieurs essais, j'ai déterminé que mon appli FxRuby avait besoin d'un fichier DLL supplémentaire (il manquait ruby_builtin_dlls\zlib1.dll) en plus des 4 fichiers DLL pour Windows listés dans la doc d'ocra (ruby_builtin_dlls\libssp-0.dll, ruby_builtin_dlls\libgmp-10.dll, ruby_builtin_dlls\libgcc_s_seh-1.dll, ruby_builtin_dlls\libwinpthread-1.dll). Problème officiellement résolu, grâce à toi umfred. Merci encore (j'avais pas trouvé l'issue pour net-ssh de la dll manquante et c'était la solution à mon problème).

            -
            Edité par Genie23 30 avril 2021 à 11:55:55

            • Partager sur Facebook
            • Partager sur Twitter

            Hier est derrière ; Demain est un mystère ; Aujourd'hui est un cadeau : c'est pourquoi on l'appelle le Présent. [Maître Oogway]

            Ocra avec FxRuby

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown