2 votes

Ruby obtient l'erreur "can't modify frozen string" en essayant d'utiliser Rudyscript2exe

J'ai un ruby script sur ce Mac, que je veux distribuer aux utilisateurs de Windows. J'essaie d'utiliser la gemme Rubyscript2exe pour en faire un exécutable, mais lorsque je lance la commande suivante :

$ rubyscript2exe jabberbot.rb

Je reçois l'erreur suivante :

/Library/Ruby/Gems/1.8/gems/rubyscript2exe-0.5.3/bin/rubyscript2exe:5:in `replace': can't modify frozen string (TypeError)
from /Library/Ruby/Gems/1.8/gems/rubyscript2exe-0.5.3/bin/rubyscript2exe:5
from /usr/bin/rubyscript2exe:19:in `load'
from /usr/bin/rubyscript2exe:19

/Library/Ruby/Gems/1.8/gems/rubyscript2exe-0.5.3/bin/rubyscript2exe is

gemdir  = File.expand_path("..", File.dirname(__FILE__))
realstuff   = File.expand_path("realstuff.rb", gemdir)
isapplication   = File.basename(File.dirname(__FILE__)) == "bin"

$0.replace(realstuff)   if isapplication

load(realstuff)

La ligne 19 de /usr/bin/rubyscript2exe est

load Gem.bin_path('rubyscript2exe', 'rubyscript2exe', version)

Nouveau numéro :

Après avoir remplacé le code comme indiqué dans la réponse, j'obtiens maintenant cette erreur :

/private/tmp/tar2rubyscript.d.4970.1/rubyscript2exe/rubyscript2exe.rb:37:in `expand_path': can't convert nil into String (TypeError)
from /private/tmp/tar2rubyscript.d.4970.1/rubyscript2exe/rubyscript2exe.rb:37:in `appdir'
from /private/tmp/tar2rubyscript.d.4970.1/rubyscript2exe/rubyscript2exe.rb:96
from /private/tmp/tar2rubyscript.d.4970.1/rubyscript2exe/init.rb:2:in `load'
from /private/tmp/tar2rubyscript.d.4970.1/rubyscript2exe/init.rb:2
from /Library/Ruby/Gems/1.8/gems/rubyscript2exe-0.5.3/realstuff.rb:632:in `load'
from /Library/Ruby/Gems/1.8/gems/rubyscript2exe-0.5.3/realstuff.rb:632
from /Library/Ruby/Gems/1.8/gems/rubyscript2exe-0.5.3/realstuff.rb:577:in `newlocation'
from /Library/Ruby/Gems/1.8/gems/rubyscript2exe-0.5.3/realstuff.rb:505:in `newlocation'
from /Library/Ruby/Gems/1.8/gems/rubyscript2exe-0.5.3/realstuff.rb:472:in `newlocation'
from /Library/Ruby/Gems/1.8/gems/rubyscript2exe-0.5.3/realstuff.rb:505:in `newlocation'
from /Library/Ruby/Gems/1.8/gems/rubyscript2exe-0.5.3/realstuff.rb:577:in `newlocation'
from /Library/Ruby/Gems/1.8/gems/rubyscript2exe-0.5.3/realstuff.rb:619
from /Library/Ruby/Gems/1.8/gems/rubyscript2exe-0.5.3/bin/rubyscript2exe:11:in `load'
from /Library/Ruby/Gems/1.8/gems/rubyscript2exe-0.5.3/bin/rubyscript2exe:11
from /usr/bin/rubyscript2exe:19:in `load'
from /usr/bin/rubyscript2exe:19

1voto

sawa Points 62592

Votre problème est dû à un changement de spécification effectué dans ruby 1.8.7 et ruby1.9. $0 fait référence au nom du programme, mais il s'est figé. Utilisez-vous la version la plus récente de rubyscript2exe ? Si non, essayez la version la plus récente. Si le problème est toujours là, alors, comme suggéré par rubyscript2exe Changez la ligne :

$0.replace(realstuff)   if isapplication

à ceux-là :

# $0.replace(realstuff)   if isapplication   # original
$__0 = realstuff   if isapplication          # added
alias $__0 $0                                # added
alias $0 $_0                                 # added

0voto

k06a Points 2741

Ce lien peut vous aider : http://www.ruby-forum.com/topic/3173966

Vous pouvez utiliser l'ocra : http://ocra.rubyforge.org/

Par ici :

gem install ocra
ocra --console myapp.rb

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X