2015-02-16 1 views
3

Я пытаюсь развернуть рельсы на jRuby, используя файл .war с помощью Warbler (Tomcat) и/или Torquebox 4 (Wildfly). Проблема, с которой я сталкиваюсь, заключается в том, что я не знаю, как обрабатывать закачки с помощью Carrierwave или Paperclip в этом случае. Идеальная загрузка должна храниться вне войны, так как она может быть заменена более новой версией приложения в любое время. Я попытался создать символическую ссылку (uploads) в общедоступном каталоге, прежде чем я упаковал приложение в качестве военного файла в каталог/home/username/uploads (разрешения назначены на 777), но это не работает (я получаю ошибку 500).Как обрабатывать закачки и журналы в Rails при развертывании в качестве .war-файла?

Также как я могу получить доступ к production.log после того, как я развернул файл войны? Или где я должен разместить журналы?

UPDATE Я понял, как конфиг Carrierwave для хранения загрузки вне войны файла:

if Rails.env.development? 
    CarrierWave.configure do |config| 
     config.root = "/Users/Username/username_uploads/uploads" 
    end 
elsif Rails.env.production? 
    CarrierWave.configure do |config| 
     config.root = "/home/username/username_uploads/uploads" 
    end 
end 

Теперь Carrierwave загружает файлы без проблем, но я получаю ошибку 404 при попытке просмотра их. Я попытался включить символическую ссылку в файл войны в папку uploads, но не успел. Я попытался создать его перед запуском warble war, а также после того, как приложение было развернуто в Tomcat (внутри папки app_name).

Любая идея, как решить эту проблему?

UPDATE 2 Я нашел рабочее решение здесь: Configure Symlinks for single directory in Tomcat

Короче говоря: кд в каталог разобранной войны (вы можете найти это под кот/WebApps), что кот создан (если имя загруженный файл войны - yourapp.war, тогда имя каталога будет yourapp в Tomcat 8). Создать папку с датой загрузки sudo mkdir uploads Создайте точку монтирования:

Я еще не проверял это с Wildfly, но я буду позже сегодня или завтра. Если я правильно помню, он не будет автоматически взорвать военные файлы по умолчанию.

Я все еще хотел бы знать дополнительные, более простые, различные решения проблемы, хотя, а также мнения о решении, которое я нашел.

+0

Привет, вам удалось найти решение этой проблемы. Я также пытаюсь выяснить, где хранить файлы журнала приложений. – kobra

+0

Привет, к сожалению, я еще не понял этих. Я попросил парней-носителей на github, но они сказали мне спросить об этом здесь. Но как вы не видите ответа. –

+0

Я также попросил ребят из Paperclip в Github, и я получил это предложение: «Вы пытались взломать военный файл? Я делаю это с Tomcat, и загрузка файлов, похоже, сработает. В противном случае я, вероятно, взглянул бы на указание путь где-то еще: https://github.com/thoughtbot/paperclip#understanding-storage "- У меня не было времени попробовать это. Если он работает для вас, пожалуйста, поделитесь им здесь, потому что он может работать и для Carrierwave. –

ответ

-1

Если вы могли бы предоставить свои журналы, было бы намного легче диагностировать проблему (я полагаю, что эта проблема только в производстве, потому что вы спрашиваете о том, как получить доступ к этому журналу?). Перейдите в каталог приложений rails и посмотрите в log/production.log. Эти уровни журналов часто ниже, поэтому вам может потребоваться настроить их более информативно. config/enviroments/prouction.rb должен иметь config.log.level, вероятно, это значение равно info, чтобы установить его в debug для более подробного ведения журнала.

+0

Я думаю, что вы не поняли мой вопрос/проблему. Вопросы: как я могу хранить (это разрешено, если вы читаете мое обновление), и обслуживать загруженные пользователем файлы за пределами файла .war, который генерирует дробовик или крутящий момент с крутящим моментом. –

+0

Я прочитал вопрос (и обновление), и я понял, что теперь вы можете его сохранить, но по-прежнему возникают проблемы с его получением с ошибкой 404, видя, что ваши журналы сообщили об этом 404, поможет выяснить, что проблема (ваш вопрос также спросил, как получить доступ к журналам, поэтому я включил в них детали). –

+0

Да, проблема заключается в том, чтобы загрузить загруженные пользователем файлы. Когда я пытаюсь получить доступ к загруженному файлу, я получаю 404 из рельсов, однако я не могу получить доступ к производственному журналу, так как каталог журнала (в WEB-INF) пуст. Проблема, скорее всего, связана с тем, что сказано выше. –

1

Простое питание для размышлений о другом подходе ...

Использование службы хранения «на основе облака» сделает загрузку и обслуживание проблемных активов уйти, было бы также сделать его проще масштабировать приложение, если вы когда-нибудь понадобится второй узел,

было бы также уменьшить необходимость масштабировать приложение, потому что вы бы эффективно делегировать крупные операции с данными, которые рубин традиционно обрабатывают плохо другой сервис

Amazon S3 является очевидным выбором, but check out Riak too

+0

Hi bbozo! Спасибо за ответ. Да, я подумал об этом, но мне все же хотелось бы знать, как я могу сделать эту работу без облачной службы хранения. –

+0

Я тоже :) Я буду смотреть :) Интересно, как вы занимаетесь разработкой? Я попытался сделать проект с Rails & Torquebox и, в конце концов, отдал его Sinatra & Puma, потому что потребовалось 4 минуты для перезапуска, было смешно работать в разработке – bbozo

1

по умолчанию Tomcat не следовать по символическим ссылкам (из соображений безопасности). Чтобы включить это, вы должны добавить следующее внутри Host тег в server.xml:

<!-- Tomcat 7: --> 
<Context allowLinking="true" /> 

<!-- Tomcat 8: --> 
<Context> 
    <Resources allowLinking="true" /> 
</Context> 

Смотрите docs и последняя migration guide.

+0

Я пробовал это недавно, но я все еще получаю ошибку 404 от рельсов, когда я пытаюсь для доступа к загруженному ресурсу. Возможно, это недоразумение с моей стороны: я не смог найти Контекст в server.xml (Tomcat 8), но был файл context.xml, где я сделал эти изменения без успеха. Должен ли я добавить блок Context внутри server.xml и попробовать его таким образом? –

+0

К сожалению, мой ответ был не таким ясным. Я обновил его. – amiuhle

+0

Другая проблема заключается в том, что, насколько мне известно (отсюда: http://stackoverflow.com/questions/6691413/jruby-warbler-does-not-preserve-symbolic-links), драгоценный камень варблера не поддерживает символические ссылки (но, пожалуйста, поправьте меня, если я ошибаюсь), поэтому мне нужно создать их после того, как Tomcat взорвал файл войны на сервере. Есть ли способ, который позволяет мне помещать app specific context.xml или server.xml в мое приложение rails, которое выполняет одно и то же (конечно, камышевка помещает их внутри META-INF или WEB-INF)? –

1

Я думаю, что проблема, которую вы испытываете с этим решением:

if Rails.env.development? 
    CarrierWave.configure do |config| 
     config.root = "/Users/Username/username_uploads/uploads" 
    end 
elsif Rails.env.production? 
    CarrierWave.configure do |config| 
     config.root = "/home/username/username_uploads/uploads" 
    end 
end 

является то, что вы храните изображения за пределами рельсов общих папок, и поэтому рельсы не могут служить им больше. Carrierwave загружает все правильно, как и следовало ожидать, и создает ссылки по отношению к директории хранилища. Если вы используете стандартное хранилище # {Rails.root}/общего пользования, рельсы будут обслуживать ваши изображения, поскольку обслуживается любой контент из общедоступного (также статический html или другие активы). Поскольку Rails больше не обслуживает их, вам нужно обслуживать их.

Возможно, вы можете просто напрямую обслуживать их через Tomcat (поскольку у меня нет опыта в настройке Tomcat, вам нужно это выяснить). Это может быть даже быстрее, так как запрос превосходит стек рельсов.

+0

Спасибо за ввод. Да, вы хорошо описали эту проблему. Недавно я обновил свой вопрос с помощью рабочего решения, однако я до сих пор не знаю, является ли это «лучшей практикой» или нет. –

+0

Я предполагаю, что вышеописанный метод несколько взломан, поскольку вы теряете все, о чем идет военный файл. Я просмотрел его, и я думаю, что псевдонимы - это способ Tomcat для обработки таких вещей (https://blog.openshift.com/multipart-forms-and-file-uploads-with-tomcat-7/ смотрите в разделе Шаг 5) , Если вы можете жить с взорванной войной и точками монтирования или какие-то дополнительные сценарии, которые создают символические ссылки после взрыва войны, это тоже должно быть хорошо, хотя обслуживание этих файлов непосредственно в tomcat происходит определенно быстрее, чем обслуживание их через рельсы. –

+0

Я просто пытался установить псевдонимы, но не имел успеха. Я создал context.xml в каталоге конфигурации rails и сконфигурировал warbler (config.script_files << 'config/context.xml'), чтобы включить его в файл войны, внутри META-INF. Я также допустил переопределения в контекстном контексте xml Tomcat. В результате я попытаюсь получить доступ к загруженным пользователем файлам. Я бы хотел, чтобы это решение было лучше, чем тот, который я опубликовал. Любые идеи, почему это не работает? –