I am struggling with ruby 2.8 which is incorporated in the latest release of SU2018.
I tried several xlsx readers
roo
rubyXL
creek
simple_xlsx_reader
Neither of them works. (They can not be installed)
The common root problem is that all of them are using nokogiri gem.
Nokogiri is preinstalled gem by SU.
Unfortunately nokogiri works only with ruby version 2.7.
Anybody has a guess what can be done?
In SU2019 the Ruby API was upgraded to Ruby 2.5.1
# v2018
RUBY_VERSION
2.2.4
#v 2019
RUBY_VERSION
2.5.1
why do you think this?
john
Thank you. Yes you are right
The title of the topic is wrong. It should be nokogiri vs SU2018
Please see the error messages during installation roo
(very similar error messages can be seen for all the other xlsx reader installations)
Gem::install(ârooâ)
Error: #<Gem::InstallError: nokogiri requires Ruby version < 2.7.dev, >= 2.3.>
C:/Program Files/SketchUp/SketchUp 2018/Tools/RubyStdLib/rubygems/installer.rb:560:in ensure_required_ruby_version_met' C:/Program Files/SketchUp/SketchUp 2018/Tools/RubyStdLib/rubygems/installer.rb:782:in
pre_install_checksâ
C:/Program Files/SketchUp/SketchUp 2018/Tools/RubyStdLib/rubygems/installer.rb:231:in install' C:/Program Files/SketchUp/SketchUp 2018/Tools/RubyStdLib/rubygems/request_set.rb:166:in
block in installâ
C:/Program Files/SketchUp/SketchUp 2018/Tools/RubyStdLib/rubygems/request_set.rb:150:in each' C:/Program Files/SketchUp/SketchUp 2018/Tools/RubyStdLib/rubygems/request_set.rb:150:in
installâ
C:/Program Files/SketchUp/SketchUp 2018/Tools/RubyStdLib/rubygems/dependency_installer.rb:394:in install' C:/Program Files/SketchUp/SketchUp 2018/Tools/RubyStdLib/rubygems.rb:558:in
installâ
SU v18 only ships with Ruby 2.2.4, which is less than 2.3âŚ
when gem tries to load it as a dependancy for roo, it failsâŚ
it is not preinstalled in SUâŚ
on SU v19, which has a usable version of Ruby, you will get an error as nokogiri needs to be compiledâŚ
Error: #<Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
I did use âxml-simple-1.1.5â for something in v18, but I canât even remember whatâŚ
there are many threads on the problems with gems in the embedded ruby interpreterâŚ
john
Use:
Gem.install 'nokogiri','1.9.1'
An alternative may be the REXML
library that is supplied in the standard library, and is coded in pure Ruby. No need to compile anything or use gems or have your customers install gems.
http://ruby-doc.org/stdlib-2.2.4/libdoc/rexml/rdoc/index.html
http://www.germane-software.com/software/rexml/
http://www.germane-software.com/software/rexml/docs/tutorial.html
- Note that when they show you can include the
REXML
module, that you ONLY do so into YOUR namespace or plugin modules, NOT into SketchUpâs main Ruby Objectspace.
Thank you for yor suggestion.
Please note
- I used roo for almost one year under SU2018 without any problem on my old PC.
- It seems that the a good solution could be if I upgrade to SU2019.
This the hottest topic nowdays. I am as much confused about this as most of the average SU users.
(I just renewed, 4 days before the announcment of the new licensing structure, my traditional supscription. )
I have the very same problem as Michael
Updating Licence for 2019
Thank you for suggestion.
At least rubyXL can installed after installing nokigiri in this way.
Thank you for your suggestion.
I browsed REXML library description. It seems clear to me.
However for my present problem it is not the solution.
I do not want to reinvent the wheel. i.e. to write a complete package for parsing xlsx files.
Anyway I duly noted your suggestion. Sometimes XML files are to be parsed.
Presently I have a LAZARUS program which makes the parsing of very special xml files and export them to xlsx format
SU2021 pro vs nokogiri and rubyXL or roo
New SU major version was downloaded unfortunately the xlsx file parsing problem is back again.
(Please note that in SU2020 there was no problem at all)
In SU2021 the nokogiri gem is installed however neither rubyXL nor roo can be installed.
Pleae find below the install log for rubyXL (in case of roo the error log is very similar)
Gem.install ârubyXLâ
Error: #<Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
current directory: C:/Users/Munka/AppData/Roaming/SketchUp/SketchUp 2021/SketchUp/Gems64/gems/nokogiri-1.10.10/ext/nokogiri
C:/Program\ Files/SketchUp/SketchUp\ 2021/Tools/bin/ruby.exe -I C:/Program\ Files/SketchUp/SketchUp\ 2021/Tools/RubyStdLib -r ./siteconf20201204-2872-kb9ke3.rb extconf.rb
extconf failedNo such file or directory - C:/Program Files/SketchUp/SketchUp 2021/Tools/bin/ruby.exe
Gem files will remain installed in C:/Users/Munka/AppData/Roaming/SketchUp/SketchUp 2021/SketchUp/Gems64/gems/nokogiri-1.10.10 for inspection.
Results logged to C:/Users/Munka/AppData/Roaming/SketchUp/SketchUp 2021/SketchUp/Gems64/extensions/x64-mswin64-140/2.7.0/nokogiri-1.10.10/gem_make.out
C:/Program Files/SketchUp/SketchUp 2021/Tools/RubyStdLib/rubygems/ext/builder.rb:78:in rescue in run' C:/Program Files/SketchUp/SketchUp 2021/Tools/RubyStdLib/rubygems/ext/builder.rb:77:in
runâ
C:/Program Files/SketchUp/SketchUp 2021/Tools/RubyStdLib/rubygems/ext/ext_conf_builder.rb:48:in block in build' C:/Program Files/SketchUp/SketchUp 2021/Tools/RubyStdLib/tempfile.rb:291:in
openâ
C:/Program Files/SketchUp/SketchUp 2021/Tools/RubyStdLib/rubygems/ext/ext_conf_builder.rb:30:in build' C:/Program Files/SketchUp/SketchUp 2021/Tools/RubyStdLib/rubygems/ext/builder.rb:167:in
block in build_extensionâ
C:/Program Files/SketchUp/SketchUp 2021/Tools/RubyStdLib/rubygems/ext/builder.rb:163:in synchronize' C:/Program Files/SketchUp/SketchUp 2021/Tools/RubyStdLib/rubygems/ext/builder.rb:163:in
build_extensionâ
C:/Program Files/SketchUp/SketchUp 2021/Tools/RubyStdLib/rubygems/ext/builder.rb:208:in block in build_extensions' C:/Program Files/SketchUp/SketchUp 2021/Tools/RubyStdLib/rubygems/ext/builder.rb:205:in
eachâ
C:/Program Files/SketchUp/SketchUp 2021/Tools/RubyStdLib/rubygems/ext/builder.rb:205:in build_extensions' C:/Program Files/SketchUp/SketchUp 2021/Tools/RubyStdLib/rubygems/installer.rb:844:in
build_extensionsâ
C:/Program Files/SketchUp/SketchUp 2021/Tools/RubyStdLib/rubygems/installer.rb:327:in install' C:/Program Files/SketchUp/SketchUp 2021/Tools/RubyStdLib/rubygems/resolver/specification.rb:93:in
installâ
C:/Program Files/SketchUp/SketchUp 2021/Tools/RubyStdLib/rubygems/request_set.rb:195:in block in install' C:/Program Files/SketchUp/SketchUp 2021/Tools/RubyStdLib/rubygems/request_set.rb:183:in
eachâ
C:/Program Files/SketchUp/SketchUp 2021/Tools/RubyStdLib/rubygems/request_set.rb:183:in install' C:/Program Files/SketchUp/SketchUp 2021/Tools/RubyStdLib/rubygems/dependency_installer.rb:325:in
installâ
C:/Program Files/SketchUp/SketchUp 2021/Tools/RubyStdLib/rubygems.rb:631:in `installâ
Please edit your posts and wrap error text correctly âŚ
[How to] Post correctly formatted and colorized code on the forum?
Native gems cannot be built inside SketchUp. You must use pure-Ruby gems or pre-built gem binaries.
There are numerous topics about this in this category.
*Windows specific*
Except for possibly a very long time ago, SketchUpâs Ruby has always been a âmingwâ build. One can see this when typing RUBY_DESCRIPTION
into the console. The description ends with [x64-mingw32]
. These were compiled with either MSYS or MSYS2 gcc tools. âgccâ tools are the standard tools used by many *nix OSâs.
With SU 2021, the description ends with [x64-mswin64_140]
. Its Ruby is compiled with the Microsoft compile tools. This change was done due to compatibility issues, as Windows SU is also compiled with Microsoft tools.
Now, re Nokogiri and other gems (like sqlite3), the RubyGems web site shows several packages available for each version. Note that there is a version for âx64-mingw32â. This gem is pre-compiled for a range of Ruby versions, and works with Ruby mingw builds.
There is not an âmswinâ version.
Bottom line, unless one can compile the gems themselves, they cannot be used in SU 2021 and later versionsâŚ
Finally, Ruby itself is built and tested with both mingw and mswin builds. So, Ruby is supporting mswin, but very few gems do so.
SU 2021 has a dll that has an unexpected name. Iâm not sure what that impliesâŚ
Anyway, you may be able to use the mingw Nokogiri version. It may not work, but it does load. Please test it, and be aware that SU may crash. I donât have the time nor the code to test it.
Goto All versions of nokogiri | RubyGems.org, and download the most recent âx64-mingw32â version (currently 1.11.0.rc3
), then run
Gem.install '<full path to file>'
It installs the gem. You are running a mingw compiled gem in an mswin Ruby, which is something I have never triedâŚ
Thank you for your reply. However I am not closer to the solution.
I have no idea what a pure ruby gem is. (I googled it but no useful link was found) I suppose I have used native gems so far. For me a gem is a black box/ or collection of useful routines with well defined interface. Please give us a clear guidence how to convert a native gem to âpureâ ruby gem.
Just for background information in my SU universe every component is parametric and all the instances of a component too. These parameters are stored in an .xlsx file. If an xlsx file is can not be parsed then SU2021 can be used only as a little bit enhanced SU Viewer.
Thank you for your advice. However it does not solve my problem.
I downloaded the latest nokogiri-1.11.0.rc3-x86-mingw32.gem. It could be installed without any error message. SU2021 did not collapse.
However it is not working.
If later on various versions of rubyXL or roo were installed all of them reinstalled nokogiri-1.10.10 but rubyXL or roo were not.
If you type the following in the SU Ruby console, whatâs the output?
require 'nokogiri'; Nokogiri::VERSION
It consists of code all in plain text Ruby code.
You cannot. A native gem is written in C and compiled. Plain text Ruby code is interpreted.
The SketchUp API has attribute dictionaries so that parameters can be saved with the objects inside the model database.
But that aside, Nokogiri is not the only means of reading an XML file. Ruby comes with a standard library called REXML
(that can read and write XML files) as well as a CSV
class (that can read and write CSV files output from Excel.)
Thank you for your quick reply.
Now I understand everything but I am not happy at all.
I checked your recommendation REXML. Yes, it can read XML files,
Yes, an XLSX file is a bundle of XML files.
However REXML is very far from to fully parse an XLSX file.
Just one issue in my XLSX files formulas are heavily used to ensure that one SU component instance is just at the right location and orientation
or one component fits to another. If REXML is to be used then all the formula parsing should be written too.
Referring SU API attribute dictionaries. It is good to know. However for most of the cases they are not applicable for me. A lot of data are exported from other (lighting design) applications to an XLSX file. This xlsx file is processed in SU.