[Plugin] SketchUcation Tools 2.6.1
-
@caecarvalho said:
Hi, I'm having a similar problem that the one reported by leminilab, but I get a different response on ruby console:
Error: #<RuntimeError: can't modify frozen String>
c:/users/caetano/appdata/roaming/sketchup/sketchup 2015/sketchup/plugins/sketchucation/scf_dialog.rbs:517:ingsub!' c:/users/caetano/appdata/roaming/sketchup/sketchup 2015/sketchup/plugins/sketchucation/scf_dialog.rbs:517:in
chooseplugins'
c:/users/caetano/appdata/roaming/sketchup/sketchup 2015/sketchup/plugins/sketchucation/scf_dialog.rbs:473:inautoinstall_dlg' c:/users/caetano/appdata/roaming/sketchup/sketchup 2015/sketchup/plugins/sketchucation/scf_dialog.rbs:405:in
set_autoinstall_choice'
c:/users/caetano/appdata/roaming/sketchup/sketchup 2015/sketchup/plugins/sketchucation/scf_dialog.rbs:73:inblock in new' SketchUp:1:in
call'What happens is that the 'autoinstall' button don't work at all, and the installer inside the SFC menu won't work as well. When I go to the installed plugins, there's no list...
I found a workaround that is installing it in an aditional plugin folder using fredo's plugin. Now that's working, but would be nice to try to understand this problem! I'd appreciate if someone could help with that!
I'm using SU Pro 2015 64-Win 7
Thanks,
Caetano
This is a very rare error.
in fact, so rare that I can say I have never seen it before !
Can you give the result of:
$LOAD_PATH
Also the result of:
SCF_Dialog.custom_plugins()
The 'string' that the .gsub! is applied to is NOT 'frozen', so I can't see what's the issue ! -
@unknownuser said:
This is a very rare error.
in fact, so rare that I can say I have never seen it before !
Can you give the result of:
$LOAD_PATH
Also the result of:
SCF_Dialog.custom_plugins()
The 'string' that the .gsub! is applied to is NOT 'frozen', so I can't see what's the issue !Hi TIG,
Thanks for your fast answer!
$LOAD_PATH
["C:/Users/CAETANO/Documents/SU Custom Plugin Folder", "C:/Program Files/SketchUp/SketchUp 2015/Tools/RubyStdLib", "C:/Program Files/SketchUp/SketchUp 2015/Tools/RubyStdLib/platform_specific", "C:/Program Files/SketchUp/SketchUp 2015/Tools", "C:/Users/CAETANO/AppData/Roaming/SketchUp/SketchUp 2015/SketchUp/Plugins", "C:/ProgramData/SketchUp/SketchUp 2015/SketchUp/Plugins", "C:\ProgramData/ASGVIS", "C:\ProgramData/ASGVIS/VfS", "C:\ProgramData/ASGVIS/VfS/Ruby", "C:\ProgramData/ASGVIS/VfS/Ruby/images"]SCF_Dialog.custom_plugins()
["C:/ProgramData/SketchUp/SketchUp 2015/SketchUp/Plugins", "C:/Users/CAETANO/Documents/SU Custom Plugin Folder"]After I installed Sketchucation Tools in the custom pluguin folder that I created with Fredo's plugin (Before I've deleted the files, including the ones appdata/local/SFC and appdata/local/temp/SFC), it's working but it won't save in the default location (appdata/Roaming/SketchUp/SketchUp 2015/SketchUp/Plugins).It's saying that there's no permitions to install on this folder, instead it's installing on (ProgramData/SketchUp/SketchUp 2015/SketchUp/Plugins). So I don't get that first error anymore in the ruby console. And I still don't get the list with the installed plugins.
This problem happened after I restored the default icon for the plugins folder, cause I was having problems with another plugin installation, so I tryied those steps in this link:
http://sketchucation.com/resources/tutorials/811-setting-security-permissions-in-sketchupThe weird think is that the default plugin folder(appdata/Roaming/SketchUp/SketchUp 2015/SketchUp/Plugins) seems to have all the permissions...
I have even restored the SU installation, with no success...
I'm really intrigued by this problem! Thanks for taking your time to help!
Best,
Caetano
-
Thanks.
Looks like there is nothing odd about your
$:
Looks like a permissions issue to me...
FindC:\Users\CAETANO\AppData\Roaming\SketchUp\SketchUp 2015\SketchUp
then with Admin powers, step up one level and select its folder-icon,
ensure it has FULL permissions set for ALL those listed under:
Right-click > Context-menu > Properties > Security > Edit OK/Apply
Repeat the 'FULL
' set up for the folders contents - there should be three subfoldersPlugins, Classifications, Tools
.
Ensure that the contents of the 'Plugins
' folder are all also set 'FULL
'.
The permission changes should automatically apply to a folder's contents, but just double-check...
If the 'Plugins
' folder is missing try making it ??
try to delete the folder's "cookiejar.xml" file too - it might be corrupted.Restart SketchUp and test...
If this fails...
I see you have a Vray installation.
Can you disable that plugin, restart SketchUp and retry - to see if it is somehow conflicting ? -
@caecarvalho said:
Error: #<RuntimeError: can't modify frozen String>
c:/users/caetano/appdata/roaming/sketchup/sketchup 2015/sketchup/plugins/sketchucation/scf_dialog.rbs:517:in `gsub!'TIG - what is the source of the string you call gsub! on?
-
def self.chooseplugins(p=nil) p = nil if p == '' if p p.gsub!(/["]/, "'") ### line 517 @choi = p else @choi=nil end RBZtool.set_choi(@choi, @url, @cloud) end
Is the method
chooseplugins
receives the chosen plugins folder's path-name.
The chosen path is from a list assembled from folder-paths in $: which is filtered to remove folders like Tools, Ruby folders etc...
I think that gsub is unlikely ever to include a ", but since it's via a callback, js might mess up ?
It only runs if 'p' is not nil.
The 'p' passed should always be a 'string' [folder-path].
I'm wondering if a non-standard Vray path containing a '' rather than a '/' is causing an issue...
It'd be easily trappable in the $: filtering, but it's not at the moment...
Disabling Vray from loading might show this up ?What does your dialog offering custom-plugins folder choices look like ??
-
@tig said:
... path containing a '' rather than a '/' is causing an issue...
I recently had a problem with 'mixed separator' paths [on a PC test], oddly File.join was returning it, but using either worked...
or can you test for
.frozen?
john
-
Can you please substitute the two RBS files in the attached ZIP [you need to extract them and move them manually], with the same named files in the
../Plugins/SketchUcation
subfolder...
And restart SketchUp and retest.
This version traps for '' in $: folder-paths and makes them all '/' - so rogue paths [like Vray's] in $: don't mess us up...
If it works we know it's the culprit...
If not == Plan-B
-
That method appear to modify the input arguments. I wonder if you are passing around a reference from the system which might have been locked to protect it. The trivial way around that would be to not use the bang version of gsub ensuring that you create a copy when you modify the string.
-
@tig said:
If not == Plan-B :?
isn't the primary error attempting to gsub the frozen string [probably VRay]
in which case would
.dup.gsub
be the safer route?john
-
The attached files redo the method, hopefully avoiding the gsub completely.
The recode also replaces the '' with '/' in the folder-paths just in case.
I am unclear how a 'string' passed into the $: could be frozen when pushed into there ?
The gsub! manipulation occurred in a 'clone' of the $: anyway !
Let's see what the OP finds... -
@tig said:
I am unclear how a 'string' passed into the $: could be frozen when pushed into there ?
When adding objects to arrays you pass a reference - so the string could have been locked before pushed. That doesn't sound like something Ruby itself does, but it could be an extension that did it. For instance, it could create a constant to it's support folder - and then freeze it in order to protect its constant from inadvertent change. Then it could have pushed it to $; for convenience (all though that would be bad practice IMO).
In any case - when iterating or fetching values external to your own extension, be careful to use methods that modify the object. Make sure to copy it as Ruby as the objects you pass around will refer to the same memory. http://stackoverflow.com/a/10974116/486990
So if you iterate $: and use gsub you will be modifying the content of $: which might lead to unexpected result for the rest of the system.
-
@unknownuser said:
Looks like there is nothing odd about your $:
Looks like a permissions issue to me...
Find C:\Users\CAETANO\AppData\Roaming\SketchUp\SketchUp 2015\SketchUp
then with Admin powers, step up one level and select its folder-icon,
ensure it has FULL permissions set for ALL those listed under:
Right-click > Context-menu > Properties > Security > Edit
OK/Apply
Repeat the 'FULL' set up for the folders contents - there should be three subfolders Plugins, Classifications, Tools.
Ensure that the contents of the 'Plugins' folder are all also set 'FULL'.
The permission changes should automatically apply to a folder's contents, but just double-check...
If the 'Plugins' folder is missing try making it ??
try to delete the folder's "cookiejar.xml" file too - it might be corrupted.Restart SketchUp and test...
If this fails...
I see you have a Vray installation.
Can you disable that plugin, restart SketchUp and retry - to see if it is somehow conflicting ?Hi Guys,
I've seen a lot have been discussed, but I had the problem solved the hard way... Uninstalled everything, deleted all the remaining folders and reinstalled everything again...
I've tryied everything that TIG said above but still no success... So what I did was:
- Login as admin and ensured full permissions to every user to folder C:\Users\CAETANO\AppData\Roaming\SketchUp\SketchUp 2015\SketchUp and everything inside it.
-Deleted the "cookiejar.xml" file.
After that, ran SU and didn't work... So I disabled VFS and still didn't work...
So I got mad and unistalled everything!!
But I'd like to thank you for your time to try to help!
All the best,
Caetano
- Login as admin and ensured full permissions to every user to folder C:\Users\CAETANO\AppData\Roaming\SketchUp\SketchUp 2015\SketchUp and everything inside it.
-
@thomthom said:
@tig said:
I am unclear how a 'string' passed into the $: could be frozen when pushed into there ?
When adding objects to arrays you pass a reference - so the string could have been locked before pushed. That doesn't sound like something Ruby itself does, but it could be an extension that did it. For instance, it could create a constant to it's support folder - and then freeze it in order to protect its constant from inadvertent change. Then it could have pushed it to $; for convenience (all though that would be bad practice IMO).
In any case - when iterating or fetching values external to your own extension, be careful to use methods that modify the object. Make sure to copy it as Ruby as the objects you pass around will refer to the same memory. http://stackoverflow.com/a/10974116/486990
So if you iterate $: and use gsub you will be modifying the content of $: which might lead to unexpected result for the rest of the system.
It works on a clone of $:, so can I assume that the locked string still passes through that !
I can trap anyway for a gsub, so it's not critical...
EDIT:
After a little more delving I discovered some other potential pitfalls in $: paths containing \ versus / and 'cloning' of frozen strings etc...
The replacement RBS files in the attached ZIP should now avoid these ??
-
@tig said:
It works on a clone of $:, so can I assume that the locked string still passes through that !
How do you clone?
If you do call .clone then you clone the Array object itself - but it's a shallow clone. It doesn't clone all it's internal data.
<span class="syntaxdefault"><br />x </span><span class="syntaxkeyword">= [</span><span class="syntaxstring">"hello"</span><span class="syntaxkeyword">, </span><span class="syntaxstring">"world"</span><span class="syntaxkeyword">]<br />[</span><span class="syntaxstring">"hello"</span><span class="syntaxkeyword">, </span><span class="syntaxstring">"world"</span><span class="syntaxkeyword">]<br /><br /></span><span class="syntaxdefault">y </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">x</span><span class="syntaxkeyword">.clone<br />[</span><span class="syntaxstring">"hello"</span><span class="syntaxkeyword">, </span><span class="syntaxstring">"world"</span><span class="syntaxkeyword">]<br /><br /></span><span class="syntaxdefault">x</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">object_id<br />88135980<br /><br />y</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">object_id<br />90415700<br /><br />x</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">each </span><span class="syntaxkeyword">{ |</span><span class="syntaxdefault">n</span><span class="syntaxkeyword">| </span><span class="syntaxdefault">puts n</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">object_id </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault">88136040<br />88136000<br /></span><span class="syntaxkeyword">[</span><span class="syntaxstring">"hello"</span><span class="syntaxkeyword">, </span><span class="syntaxstring">"world"</span><span class="syntaxkeyword">]<br /><br /></span><span class="syntaxdefault">y</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">each </span><span class="syntaxkeyword">{ |</span><span class="syntaxdefault">n</span><span class="syntaxkeyword">| </span><span class="syntaxdefault">puts n</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">object_id </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault">88136040<br />88136000<br /></span><span class="syntaxkeyword">[</span><span class="syntaxstring">"hello"</span><span class="syntaxkeyword">, </span><span class="syntaxstring">"world"</span><span class="syntaxkeyword">]<br /> </span><span class="syntaxdefault"></span>
-
This article expand on the whole pass-reference-by-value nature of Ruby:
http://robertheaton.com/2014/07/22/is-ruby-pass-by-reference-or-pass-by-value/ -
Is this
array.clone
versusarray.dup
?
I have side-stepped that process now anyway, by making a new array and adding items to that... -
@tig said:
Is this
array.clone
versusarray.dup
?
I have side-stepped that process now anyway, by making a new array and adding items to that...Are you cloning the items you add?
-
In the format
item = (""+d.to_s)
where 'd
' is the element taken from the array... -
Reminder that
obj#clone()
copies the frozen state ofobj
, whilstobj#dup()
does not. -
Back on topic, the person's problems came from the fact that they changed the plugin folder's icon under Windows, which messes up permissions. I've never been able to (comfortably) fix the folder except by re-creating it, copying all it's contents over, and deleting the one the had the changed icon. (...yes even despite the "Repair" button,...)
Advertisement