Простое приложение Ruby Sinatra — необработанные данные POST

#ruby #json #sinatra #raw-post

#ruby #json #sinatra #необработанный post

Вопрос:

Я хотел бы настроить простое приложение Sinatra для сбора необработанных данных POST, которые отправляются на / URL, и сохранить эти данные в файловой системе в виде файла в формате ГГГГММДД-ХХММСС.json.

Данные, которые я буду отправлять по URL, будут простыми текстовыми данными в формате JSON.

Каков наилучший способ настроить это простое приложение Sinatra? Не уверен, как захватить необработанные данные POST.

ОБНОВЛЕНИЕ / Код:

 post '/' do
    raw = request.env["rack.input"].read
    n = DateTime.now
    filename = n.strftime("%Y%m%d")   "T"   n.strftime("%H%M%S") #any way to include microseconds?
    # write to file
end
  

Комментарии:

1. Смотрите ответ ниже и комментарии. Я перепробовал все методы, упомянутые в комментариях на этой странице gittr.com/index.php/archive /…

2. Ни один из этих методов не сработал. Как мне устранить это?

Ответ №1:

Что-то подобное должно сработать для вас:

 post "/" do
  File.open("#{Time.now.strftime("%Y%m%d-%H%M%S")}.json", "w") do |f| 
    f.puts params["data"]    
  end 
end
  

Комментарии:

1. Вау. Добрался до этого, пока дорабатывал вопрос. Это должно сработать. Есть ли способ включить миллисекунды во временную метку?

2. Time.now.strftime("%Y%m%d-%H%M%S%L") с миллисекундами.

3. Пришлось обновиться до 1.92 в Windows, чтобы получить это. 1.87 в Windows отсутствует параметр %L. Сводило меня с ума.

4. хммм. «данные» и: данные не работают. Как вы устраняете это? Нужно ли мне отправлять определенный заголовок запроса, чтобы это сработало?

5. Для тестирования этого фрагмента я использовал следующий jQuery: $.ajax({type: 'POST', url: '/', data: '{data: "someData"}'}); из firebug.