Sinatra - 将 Twilio 短信保存为 CSV
Sinatra - Saving Twilio SMS to CSV
我有一个非常简单的 Sinatra 应用程序,它允许我通过我的 Twilio 号码接收 SMS 消息,并将它们打印到应用程序 运行 所在的同一终端会话。我想将这些消息保存到本地 .csv 文件中。将 CSV.open()
添加到应用程序会引发一些错误。
require 'sinatra'
require 'twilio-ruby'
require 'csv'
post '/receive_sms' do
@body = params["Body"].to_s
@sid = params["MessageSid"].to_s
@sender = params["From"].delete('+').to_i
content_type 'text/xml'
puts @body
puts @sender
puts @sid
CSV.open("/home/ubuntu/Twilio_SMS/smsLog.csv", "a") do |csv|
csv << [@sender, @body, @sid]
end
end
这给了我以下错误:
ERROR IOError: closed stream
/home/ubuntu/.rvm/gems/ruby-2.2.1/gems/rack-1.6.4/lib/rack/body_proxy.rb:16:in `close'
/home/ubuntu/.rvm/gems/ruby-2.2.1/gems/rack-1.6.4/lib/rack/handler/webrick.rb:117:in `ensure in service'
/home/ubuntu/.rvm/gems/ruby-2.2.1/gems/rack-1.6.4/lib/rack/handler/webrick.rb:117:in `service'
/home/ubuntu/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/webrick/httpserver.rb:138:in `service'
/home/ubuntu/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/webrick/httpserver.rb:94:in `run'
/home/ubuntu/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/webrick/server.rb:294:in `block in start_thread'
我曾尝试将 CSV 调用移到 post 方法之外,但这只会在我每次启动应用程序时将 , ,
写入文件。
将此信息保存到 CSV 文件并确保添加每条消息的正确方法是什么,即使它们是快速连续收到的?
尝试向该方法添加一个有效的 return 值。
require 'sinatra'
require 'twilio-ruby'
require 'csv'
post '/receive_sms' do
@body = params["Body"].to_s
@sid = params["MessageSid"].to_s
@sender = params["From"].delete('+').to_i
content_type 'text/xml'
puts @body
puts @sender
puts @sid
CSV.open("/home/ubuntu/Twilio_SMS/smsLog.csv", "a") do |csv|
csv << [@sender, @body, @sid]
end
'done'
end
因为 'CSV.open' 是您 运行 的最后一个方法,Sinatra 尝试从中读取以生成 HTTP 回复 - 并调用 IOError
尝试从已关闭的流中读取.
我有一个非常简单的 Sinatra 应用程序,它允许我通过我的 Twilio 号码接收 SMS 消息,并将它们打印到应用程序 运行 所在的同一终端会话。我想将这些消息保存到本地 .csv 文件中。将 CSV.open()
添加到应用程序会引发一些错误。
require 'sinatra'
require 'twilio-ruby'
require 'csv'
post '/receive_sms' do
@body = params["Body"].to_s
@sid = params["MessageSid"].to_s
@sender = params["From"].delete('+').to_i
content_type 'text/xml'
puts @body
puts @sender
puts @sid
CSV.open("/home/ubuntu/Twilio_SMS/smsLog.csv", "a") do |csv|
csv << [@sender, @body, @sid]
end
end
这给了我以下错误:
ERROR IOError: closed stream
/home/ubuntu/.rvm/gems/ruby-2.2.1/gems/rack-1.6.4/lib/rack/body_proxy.rb:16:in `close'
/home/ubuntu/.rvm/gems/ruby-2.2.1/gems/rack-1.6.4/lib/rack/handler/webrick.rb:117:in `ensure in service'
/home/ubuntu/.rvm/gems/ruby-2.2.1/gems/rack-1.6.4/lib/rack/handler/webrick.rb:117:in `service'
/home/ubuntu/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/webrick/httpserver.rb:138:in `service'
/home/ubuntu/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/webrick/httpserver.rb:94:in `run'
/home/ubuntu/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/webrick/server.rb:294:in `block in start_thread'
我曾尝试将 CSV 调用移到 post 方法之外,但这只会在我每次启动应用程序时将 , ,
写入文件。
将此信息保存到 CSV 文件并确保添加每条消息的正确方法是什么,即使它们是快速连续收到的?
尝试向该方法添加一个有效的 return 值。
require 'sinatra'
require 'twilio-ruby'
require 'csv'
post '/receive_sms' do
@body = params["Body"].to_s
@sid = params["MessageSid"].to_s
@sender = params["From"].delete('+').to_i
content_type 'text/xml'
puts @body
puts @sender
puts @sid
CSV.open("/home/ubuntu/Twilio_SMS/smsLog.csv", "a") do |csv|
csv << [@sender, @body, @sid]
end
'done'
end
因为 'CSV.open' 是您 运行 的最后一个方法,Sinatra 尝试从中读取以生成 HTTP 回复 - 并调用 IOError
尝试从已关闭的流中读取.