2010-03-26 7 views
0

Мне нужно прочитать и записать некоторые данные через именованные каналы.Использование именованных каналов в Rails

Я протестировал его в простом приложении Ruby, и он работает хорошо.

Но я не знаю, где я должен положить его в свое приложение Rails? Я слышал о задачах Rake, но я не уверен, это правильное решение.

Мне нужно открыть файл-трубу и послушать данные. Если есть, мне нужно обработать его и сделать DB-запрос. Затем напишите некоторые данные в другой канал. Я знаю, как это работает, но единственная проблема - как запустить его с Rails? Приведите несколько примеров.

ответ

1

Похоже, что у вас есть веб-сайт, на котором будет использоваться источник данных, который вы передаете по трубе. Похоже, что это не будет частью цикла HTTP-запроса/ответа, что может сделать задачу рейка хорошим выбором.

Создайте файл в LIB/задач под названием listener.rake

он должен выглядеть следующим образом:

desc 'Listens to pipe and does stuff' 
task :listen_to_pipe => :environment do 
    puts "Listen to Pipe starting" 
    #open pipe 
    #loop to listen to it 
    puts "going to do stuff" 
    #do stuff 
    #end 
end 

Затем из командной строки в корневой директории вашего проекта вы можете вызвать его как это:

rake listen_to_pipe 

и для другой среды, сделать это:

rake listen_to_pipe RAILS_ENV=production 

Эта задача будет иметь доступ ко всем вашим моделям. Чтобы покончить с этим, нажмите Ctrl + C

Имейте в виду, что вам нужно будет остановить & перезапустите процесс, чтобы загрузить все изменения, сделанные в моделях.

+0

Спасибо вам, это работает =). Некоторые вопросы: 1. Есть ли способ автоматически загрузить эту задачу с помощью приложения rails? 2. Мне нужно отправить данные в канал, когда пользователь нажимает ссылку на моем веб-сайте (например). Я могу использовать глобальные переменные, но я думаю, что это плохая идея. – FancyDancy

+0

Нет никакого способа, которым я знаю, чтобы запустить их в одно и то же время без пакетного скрипта. Кроме того, кажется странным общаться с webapp в трубе. Если задача работы с трубой работает в базе данных, вы можете пропустить этот шаг в контроллере и напрямую работать с базой данных. Или вы можете добавить что-то в базу данных, для которой выполняется опрос задач. – Tilendor

+0

Например, пользователь нажимает ссылку «записать CD», затем Rails отправляет «писать» в другое приложение с использованием именованного канала. Я могу сделать глобальную переменную, а затем отправить ее, но это правильный путь? – FancyDancy

Смежные вопросы