Могу ли я использовать send_file для отправки файла на диск, отличный от диска Rails.root? - PullRequest
1 голос
/ 24 сентября 2010

Можно ли использовать send_file для отправки файла на диск, отличный от диска Rails.root? Я попробовал оба варианта ниже. Мне нужно использовать второй вариант, но Rails не нравится использовать диск, отличный от тома, на котором он включен.

Это работает:

def action
  send_file "C:\\rails_root\\public\\files\\file.ext"
end

Это не так:

def action
  send_file "D:\\files\\file.ext"
end

Ограничен ли send_file только диском Rails.root? Можно ли обслуживать статические файлы из каталога на подключенном сетевом диске? О, и это, к счастью, среда всех окон.

ОБНОВЛЕНИЕ : Итак, я копался в коде Rails / Ruby, который использует send_file, и я думаю, что основной причиной здесь является File.file? (Путь) . Он возвращает значение true, когда на диске, на котором работает Rails, но значение false для сетевых дисков.

ОБНОВЛЕНИЕ 2 : Действительно странно. В консоли оба местоположения, вставленные для File.file? (Путь), возвращают true. В приложении, запущенном в браузере, он возвращает false. Я в тупике.

Ответы [ 2 ]

0 голосов
/ 27 сентября 2010

Оказывается, что служба, на которой работает Apache, не имела разрешений на доступ к сетевому ресурсу.

В контроллере я использовал прямой сетевой ресурс вместо использования подключенного диска. Я до сих пор не уверен, почему подключенный диск не работает.

def download
   send_file "\\\\server\\folder\file.ext"
end

В файле конфигурации Apache (domain.conf) вы должны использовать косую черту при настройке параметров для XSendFile.

XSendFile on
XSendFilePath //server/folder/

Если у кого-то возникнут проблемы, я буду рад помочь.

0 голосов
/ 24 сентября 2010

Просто предположение.Создайте папку под корнем rails, но не в папке piblic.

Таким образом, rails должен иметь возможность читать ее, но, поскольку она не находится в общей папке, другие не должны иметь возможности прямого доступа к ней..

Поправь меня, если это не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...