ruby - Sinatra - 将 Twilio SMS 保存到 CSV

标签 ruby csv sinatra twilio

我有一个非常简单的 Sinatra 应用程序,它允许我通过我的 Twilio 号码接收 SMS 消息,并将它们打印到运行该应用程序的同一终端 session 中。我想将这些消息保存到本地 .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 文件并确保添加每条消息(即使是快速连续收到的消息)的正确方法是什么?

最佳答案

尝试向该方法添加有效的返回值。

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

关于ruby - Sinatra - 将 Twilio SMS 保存到 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35666284/

相关文章:

c# - C#动态指定类型

ruby - Sinatra 和计算 View 名称

ruby - 正在处理编码的正斜杠,就好像它是未编码的一样 - Sinatra

ruby-on-rails - Heroku 删除生产中的帖子时出错 : Rails

json - 无法从 ruby​​ 中解析的 JSON 哈希中提取数据

json - 在 Ruby 中通过路径替换和访问嵌套 hash/json 中的值

ruby-on-rails - Ruby On Rails Active Admin has_many 更改下拉列表以使用不同的列

r - 如何合并一列中的行以匹配另一列中的非空行?

java - 解析csv数据并转换为嵌套json java

ruby-on-rails - Rails、Padrino 和 Sinatra 构建预付费移动服务的适用性