При получении Rudyscript2exe ошибка получения Ruby «невозможно изменить замороженную строку» - PullRequest
2 голосов
/ 14 апреля 2011

У меня есть скрипт ruby ​​на этом Mac, который я хочу распространять среди пользователей Windows.Я пытаюсь использовать гем Rubyscript2exe для создания исполняемого файла, но когда я запускаю следующую команду:

$ rubyscript2exe jabberbot.rb

я получаю следующую ошибку:

/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)

Строка 19 файла / usr / bin / rubyscript2exe равна

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

Новый выпуск:

После замены кода в ответ я получаю эту ошибку:

/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

Ответы [ 2 ]

1 голос
/ 15 апреля 2011

Ваша проблема связана с изменением спецификации в ruby ​​1.8.7 и ruby1.9.$0 относится к имени программы, но оно стало замороженным.Вы используете новейшую версию rubyscript2exe?Если нет, попробуйте самую новую версию.Если проблема все еще существует, тогда, как предложено rubyscript2exe , измените строку:

$0.replace(realstuff)   if isapplication

на эти:

# $0.replace(realstuff)   if isapplication   # original
$__0 = realstuff   if isapplication          # added
alias $__0 $0                                # added
alias $0 $_0                                 # added
0 голосов
/ 16 февраля 2012

Эта ссылка может помочь: http://www.ruby -forum.com / topic / 3173966

Вы можете использовать ocra: http://ocra.rubyforge.org/

Таким образом:

gem install ocra
ocra --console myapp.rb
...