в Синатре: публика не возвращает путь, как ожидалось.ошибка или особенность? - PullRequest
2 голосов
/ 09 ноября 2011

В моем приложении как часть моих настроек я

set :public, Proc.new { File.join(root, 'public') }

, но если я посмотрю на переменную public в моих блоках конфигурации, это объект, который представляет целое приложение (или кажется)

public.to_json -->

{"extensions":[],"conditions":[],"routes":{},
 "inheritable_attributes":{},"errors":{},"prototype":null,"active_user":null,
 "templates":{},"filters":{"after":[],"before":[]},
 "middleware":[],"models_are_loaded":true}

но в моем блоке конфигурации public используется только для разрешения 'public'

это меня беспокоит, потому что каждый запрос к моему приложению теперь жалуется, что оно "не может преобразовать Class в String" для строки

set :images, Proc.new {File.join(public, 'images')}

но странно это раньше нормально работало

Что-то изменилось в Ruby или Sinatra за последние три недели (я был в отпуске, и это сработало до моего отъезда)?

Примечание. Я также попытался оставить комментарий set :public, ... закомментированным, как обычно, но это дает тот же результат.

1 Ответ

4 голосов
/ 09 ноября 2011

Начиная с синатры 1.3, public устарело в пользу public_folder. Это было сделано, чтобы избежать перегрузки Module#public

Это сейчас:

dir = File.dirname(__FILE__)
set :public_folder, "#{dir}/public"

Я не уверен, почему вы используете Proc, хотя в ваших примерах ...

...