Ruby, Premature end of script headers

Все о программировании под *nix
Аватара пользователя
sm
Неотъемлемая часть форума
Сообщения: 431
Зарегистрирован: 12 мар 2004, 16:03
Контактная информация:

Ruby, Premature end of script headers

Сообщение sm »

Из переписки с хостером.
[...]Сейчас у меня работает на сайте несколько php скриптов, и я хотел
бы переписать их на ruby. Но не получается просто запустить скрипт,
возможно я делаю что-то не так. Может вы подскажите что?

Создал файл 1.rb, закинул его в cgi-bin, сделал исполняемым, запустил:
http://www.удалено.by/cgi-bin/1.rb
Выдает ошибку, можете проверить, файл я не удалял:
The server encountered an internal error or misconfiguration and was
unable to complete your request.
Please contact the server administrator, удалено@удалено.by and
inform them of the time the error occurred, and anything you might
have done that may have caused the error.
More information about this error may be available in the server error log.

Содержимое файла:
#!/usr/bin/ruby
puts "Content-type: text/html\n\n"
puts "<html><body>This is a test It's #{Time.now}</body></html>\n"

В удалено.by.error.log:
[Fri Apr 04 11:17:11 2008] [error] [client 86.57.195.146] failed to open log file
[Fri Apr 04 11:17:11 2008] [error] [client 86.57.195.146] fopen: Permission denied
[Fri Apr 04 11:17:11 2008] [error] [client 86.57.195.146] Premature end of script headers: 1.rb
Здравствуйте,

Логи указывают на то, что скрипт неправильный. Читайте документацию по ruby.
Почитал книги, погуглил. Пробовал следующее:
- #!/usr/bin/ruby заменял на #!/usr/bin/env ruby
- менял различные права доступа для каталога и самого скрипта
- удалял .htaccess в каталоге со скритом, пробовал добавлять в него "AddHandler cgi-script .cgi .rb"
- пробовал сохранять файл в различных кодировках
- фтп-клиентом файл заливал и в двоичном и в текстовом режимах
- пробовал в puts-ах \n заменять на \r\n

Ошибка не исчезла. Может кто разруливал подобное?

Аватара пользователя
Victor Gr.
Неотъемлемая часть форума
Сообщения: 891
Зарегистрирован: 13 авг 2004, 15:39
Откуда: Минск
Контактная информация:

Сообщение Victor Gr. »

sm, вряд ли, но всё же "Content-Type:".

В puts должно быть \n\n, да.

Исполняемым сделал для всех? (chmod a+x ?).

Почему в логах:
[Fri Apr 04 11:17:11 2008] [error] [client 86.57.195.146] failed to open log file
[Fri Apr 04 11:17:11 2008] [error] [client 86.57.195.146] fopen: Permission denied
?

Так же, попробуй создать там же скрипт на perl:

hello.pl:

Код: Выделить всё

#!/usr/bin/perl

print "Content-Type: text/plain\n\n";
print "Hello World!";
AddHandler cgi-script .pl в .htaccess

chmod a+x hello.pl

Будет работать?

Аватара пользователя
grub
Неотъемлемая часть форума
Сообщения: 849
Зарегистрирован: 13 сен 2006, 10:29
Откуда: Минск
Контактная информация:

Сообщение grub »

очень похоже на то что конфиг виртуал-хоста указывает на недоступный либо рид-онли лог-файл

где у тебя лог-файлы лежат? какие на них права?

olecom
Интересующийся
Сообщения: 65
Зарегистрирован: 03 апр 2008, 18:54
Откуда: Родом: Чернавчицы, Брест, Бульбастан; Сейчас: Оломоуц, Чехия.

перевод строки в HTTP и вообще

Сообщение olecom »

Victor Gr.,

Код: Выделить всё

print "Content-Type: text/plain\n\n";
                               ^^^^
Это Apache всё прожуёт и выплюнет. По всем правилам должно быть '\r\n' вместо просто '\n'.
Достаточно провести вот такой эксперимент в ближайшем эмуляторе терминала:

Код: Выделить всё

$ stty -onlcr ; printf '1\r\n2\r\n3\r\n----\n4\n5\n6\n' ; stty onlcr
Да, рога уNIX повсеместно.
_______

Аватара пользователя
Eugene
Маньяк
Сообщения: 162
Зарегистрирован: 13 фев 2004, 15:02
Откуда: Minsk
Контактная информация:

Сообщение Eugene »

Perl uses \n to represent a "logical" newline, regardless of platform. In MacPerl, \n always means \015. In DOSish Perls, \n usually means \012, but when accessing a file in "text mode", it is translated to (or from) \015\012, depending on whether you're reading or writing. Unix does the same thing on terminals in canonical mode. \015\012 is commonly referred to as CRLF.
(c) Programming Perl
/born to bash/

[ updated: 2006-02-21 ]

/born to zsh/

olecom
Интересующийся
Сообщения: 65
Зарегистрирован: 03 апр 2008, 18:54
Откуда: Родом: Чернавчицы, Брест, Бульбастан; Сейчас: Оломоуц, Чехия.

Сообщение olecom »

Получаются классические многоуровни с параллельными багами.

Значит у перла ещё не одна библиотека для работы с хидерами есть,
только вот где они и как они работают порой вопрос?

По теме, похоже такой же абзац не помешал бы про руби.
____

Аватара пользователя
grub
Неотъемлемая часть форума
Сообщения: 849
Зарегистрирован: 13 сен 2006, 10:29
Откуда: Минск
Контактная информация:

Сообщение grub »

olecom писал(а): По теме, похоже такой же абзац не помешал бы про руби.
____

s/perl/ruby/
s/print/puts/g

:)

olecom
Интересующийся
Сообщения: 65
Зарегистрирован: 03 апр 2008, 18:54
Откуда: Родом: Чернавчицы, Брест, Бульбастан; Сейчас: Оломоуц, Чехия.

ascii в африке.

Сообщение olecom »

grub писал(а):
olecom писал(а): По теме, похоже такой же абзац не помешал бы про руби.
____
s/perl/ruby/
s/print/puts/g

:)
>> пробовал в puts-ах \n заменять на \r\n

а в них

> В puts должно быть \n\n, да.

тогда всё ясно :)

Хочу ещё раз подчеркнуть (не на перл примере), что HTTP (MS IIS) хочет ASCII \r\n на концах строки, так как оно и в африке ASCII.
_____

Аватара пользователя
sm
Неотъемлемая часть форума
Сообщения: 431
Зарегистрирован: 12 мар 2004, 16:03
Контактная информация:

Сообщение sm »

Благодарю всех. Проблема разрулилась.

Права доступа лог файлов 440 заменены на 666. У меня не было к ним доступа, саппорт хостинга помог.
Проверил -- скрипты действительно запускаются только имея формат файла unix (в гвиме можно менять).
Проверил -- puts "Content-type: text/html\n\n" без двойного \n\n апач может прожует, но подавится. Выдает ошибку с одним \n или \r\n.

Тему можно закрыть.

Закрыто