Erubis не работает при запуске из PHP - PullRequest
0 голосов
/ 31 мая 2018

Я вызываю скрипт Ruby из PHP с system('ruby show.rb filename').

show.rb выглядит следующим образом:

require 'erubis'
f = ARGV[0]
puts f
input = File.read(f)
eruby = Erubis::Eruby.new(input)
puts eruby.result(binding())

При выполнении команды ruby show.rb filename в консоли все выводится на печать, но при вызове из PHP это только печать имени файла,но шаблон не отображается.Чтобы увидеть ошибки, я отправил stderr -> stdout в вызове PHP и получил это

/Library/Ruby/Gems/2.3.0/gems/erubis-2.7.0/lib/erubis/converter.rb:132:in 'scan': invalid byte sequence in US-ASCII (ArgumentError) from /Library/Ruby/Gems/2.3.0/gems/erubis-2.7.0/lib/erubis/converter.rb:132:in 'convert_input' from /Library/Ruby/Gems/2.3.0/gems/erubis-2.7.0/lib/erubis/converter.rb:36:in 'convert' from /Library/Ruby/Gems/2.3.0/gems/erubis-2.7.0/lib/erubis/engine.rb:30:in 'initialize' from show.rb:5:in 'new' from show.rb:5:in temp/Newsletter.rb'

Я новичок в Ruby.Есть ли какие-либо дополнительные параметры, чтобы это исправить?Что PHP делает там по-другому, что ошибка может произойти?

1 Ответ

0 голосов
/ 01 июня 2018

Не знаю почему, но при открытии файла шаблона erubis внутри show.rb, вызываемого PHP, он должен быть открыт как двоичный файл.Поэтому мне нужно было только изменить show.rb на:

require 'erubis'
f = ARGV[0]
handle = File.open(f, "rb") # "rb" fixed the issue.
input = handle.read()
handle.close()
eruby = Erubis::Eruby.new(input)
puts eruby.result(binding())
...