标签: sinatra

Sinatra"后"过滤器

Sinatra有一个"之前"过滤器,但是有一种简单的方法来实现"后"过滤器吗?

ruby sinatra

5
推荐指数
1
解决办法
1260
查看次数

Sinatra流和Eventmachine频道

使用Sinatra Streaming,有一种方法可以指定哪些连接获取发送的信息。例如,只有特定帐户上的用户。

我相信可以使用Eventmachine Channels完成此操作,但我不知道如何做。任何建议,甚至更好的示例代码将不胜感激。

以下是代码的相关部分。现在,您可以看到它只是发送到每个打开的连接。

configure do
    set server: 'thin', connections: []
    set :app_file, __FILE__
    set :port, ENV['PORT']
    set :public_folder, File.dirname(__FILE__) + '/public'
end

get '/stream', provides: 'text/event-stream' do
    stream :keep_open do |out|
        settings.connections << out
        out.callback { settings.connections.delete(out) }
    end
end

post '/update/contact/:id' do
    @contact = Contact.get(params[:id])
    @contact.update(params[:contact])
    settings.connections.each { |out| out << "data: #{@contact.account_id} Contact #{@contact.id} #{@contact.first_name} #{@contact.last_name}\n\n" }
    204
end
Run Code Online (Sandbox Code Playgroud)

ruby sinatra eventmachine

5
推荐指数
1
解决办法
579
查看次数

如何使用Rack接收JSON对象

我有一个非常简单的Ruby Rack服务器,如:

app = Proc.new do |env| 
  req = Rack::Request.new(env).params
  p req.inspect 
  [200, { 'Content-Type' => 'text/plain' }, ['Some body']]
end 

Rack::Handler::Thin.run(app, :Port => 4001, :threaded => true)
Run Code Online (Sandbox Code Playgroud)

每当我使用JSON对象向服务器发送POST HTTP请求时:

{ "session": {
"accountId": String,
"callId": String,
"from": Object,
"headers": Object,
"id": String,
"initialText": String,
"parameters": Object,
"timestamp": String,
"to": Object,
"userType": String } } 
Run Code Online (Sandbox Code Playgroud)

我一无所获.我可以检测到收到的请求但无法获取数据.在我的控制台上的结果puts req.inspect是这样的:

"{}"
Run Code Online (Sandbox Code Playgroud)

我该如何获取数据?

我试图通过以下方式改变它:

request  = Rack::Request.new env
object   = JSON.parse request.body
puts JSON.pretty_generate(object)
Run Code Online (Sandbox Code Playgroud)

但我收到以下警告:

!! Unexpected error while processing request: can't …
Run Code Online (Sandbox Code Playgroud)

ruby json rack ruby-on-rails sinatra

5
推荐指数
2
解决办法
4994
查看次数

错误阻止在Sinatra应用程序中不起作用

我有以下Sinatra应用程序,我正在测试error块,但它似乎没有工作.

这是我的sinatra应用程序:

require 'rubygems'
require 'sinatra'

error do
  puts "----> Failed"
  $stdout.print "----> Failed"
end

get "/*" do
  raise "Error!!"
end
Run Code Online (Sandbox Code Playgroud)

我正在使用sinatra(1.3.3)

sinatra

5
推荐指数
2
解决办法
1073
查看次数

Sinatra找不到视图目录

我正在尝试以一种类似于常规Ruby Gem结构的方式来构造Sinatra应用程序。我有以下文件树:

.
??? app.rb
??? config.ru
??? Gemfile
??? Gemfile.lock
??? helpers
?   ??? dbconfig.rb
?   ??? functions.rb
?   ??? init.rb
??? hidden
?   ??? Rakefile
??? lib
?   ??? admin.rb
?   ??? api.rb
?   ??? indexer.rb
?   ??? init.rb
?   ??? magnet.rb
??? models
?   ??? init.rb
?   ??? invite.rb
?   ??? tag.rb
?   ??? torrent.rb
?   ??? user.rb
??? public
?   ??? css
?   ?   ??? reset.css
?   ?   ??? style.css
?   ??? i
?   ??? img …
Run Code Online (Sandbox Code Playgroud)

ruby gem runtime-error sinatra

5
推荐指数
2
解决办法
3216
查看次数

如何将Sinatra应用程序作为gem发布并部署它?

我有一个sinatra应用程序并将其打包为宝石.它的文件布局看起来大致如下:

??? bin
?   ??? tubemp
??? lib
?  ??? tubemp.rb
??? Gemfile
??? tubemp.gemspec
Run Code Online (Sandbox Code Playgroud)

我可以安装并运行它就好了.呼叫ruby lib/tubemp.rb也会触发应用程序,因为Sinatra让它自行启动.tubemp.rb:

class Tubemp < Sinatra::Application
  get '/' do
    erb :index, :locals => { :title => "YouTube embeds without third party trackers." }
  end
end
Run Code Online (Sandbox Code Playgroud)

二进制文件也很简单.bin/tubemp:

#!/usr/bin/env ruby
require "tubemp.rb"
Tubemp.run!
Run Code Online (Sandbox Code Playgroud)

但现在我想将其部署为Rack-app.或者将其部署在Rack-app中.至少它应该在生产机器上的Passenger下运行.

使用通用应用程序,就像config.ru在应用程序所在的目录中添加a一样简单.然后,该文件粗略地包括和调用run Tubemp.将nginx或apache的乘客指向此机架文件和应用程序所在的目录,启动它.这很有效,直到我把它变成了宝石; 因为现在我不再拥有"应用程序所在的目录",gem install tubemp除此之外决定放置文件.

我是否需要创建一个wrapper捆绑了tubemp-gem及其依赖项的应用程序?如果是这样,我如何从rackup文件中调用gem ?还是我完全错了?

deployment gem rack sinatra

5
推荐指数
1
解决办法
1032
查看次数

Sinatra:Hash的未定义方法字节大小

我正在创建一个Sinatra应用程序,它采用上传的CSV文件并将其内容放入哈希值.当我在app.rb中引用此哈希时,如下所示:

hash = extract_values(path_to_filename)

我一直收到此错误消息:

用于Hash的未定义方法`bytesize':0x007fc5e28f2b90 #object_id

file:utils.rb位置:bytesize行:335

我在某处读到这是一个Webrick问题.我切换到Thin,错误是一样的.

我的哈希/ CSV文件的大小非常小,所以它不是问题.

我正在使用ruby 1.9.3p374.

谢谢!

ruby hash thin webrick sinatra

5
推荐指数
1
解决办法
8882
查看次数

Sinatra并不是以twitter gem开头的

当我尝试启动sinatra时,我遇到了以下错误

/var/lib/gems/1.9.1/gems/sinatra-1.4.4/lib/sinatra/base.rb:1488:in'for start_server': undefined methodHTTP:Module(NoMethodError)

require 'sinatra/base'
require_relative "twt.rb"

class SinatraApp < Sinatra::Base
    set :static, true
    set :public_folder, File.dirname(__FILE__) + '/static'

    get '/getuserinfo' do
        @user = twit.getuserinfo
        erb :userInfo
    end
end

SinatraApp.run!
Run Code Online (Sandbox Code Playgroud)

在"twt.rb"我需要推特(5.7.1)

require 'twitter'

class Twit
    attr_accessor :client

    def initialize(consumer_key,consumer_secret,access_token,access_token_secret)           
        @client = Twitter::REST::Client.new do |config|
          config.consumer_key        = consumer_key
          config.consumer_secret     = consumer_secret
          config.access_token        = access_token
          config.access_token_secret = access_token_secret
        end
    end

    def getUserInfo
        return user = {     
            "name"=> client.current_user.name,
            "id" => client.current_user.id
        }
    end

    def showAllFriends
         client.friends.each { |item| puts …
Run Code Online (Sandbox Code Playgroud)

ruby twitter sinatra

5
推荐指数
2
解决办法
1134
查看次数

在Ruby/Sinatra中,如何使用ERB模板和错误消息暂停

在我的Sinatra项目中,我希望能够同时停止错误代码和错误消息:

halt 403, "Message!"
Run Code Online (Sandbox Code Playgroud)

反过来,我想要在错误页面模板中呈现(使用ERB).例如:

error 403 do
    erb :"errors/error", :locals => {:message => env['sinatra.error'].message}
end
Run Code Online (Sandbox Code Playgroud)

然而,显然env['sinatra.error'].message(也就是自述文件和每个网站都说我应该这样做)并没有暴露我提供的信息.(此代码在运行时返回undefined method `message' for nil:NilClass错误.)

我已经搜索了4-5个小时并尝试了所有内容,但我无法弄清楚消息通过ERB呈现给我的位置!有谁知道它在哪里?


(似乎我能想到的唯一选择是写这个而不是halt上面的代码,每次我想停止:

halt 403, erb(:"errors/error", :locals => {m: "Message!"})
Run Code Online (Sandbox Code Playgroud)

这段代码有效.但这是一个混乱的解决方案,因为它涉及硬编码错误ERB文件的位置.)

(如果你想知道,这个问题是不相关的show_exceptions,因为这两个配置标记set :show_exceptions, false,并set :show_exceptions, :after_handler没有什么区别.)

ruby erb sinatra

5
推荐指数
1
解决办法
1635
查看次数

如何将Puma :: Configuration传递给Sinatra?

这是我的网络应用:

class Front < Sinatra::Base
  configure do
    set :server, :puma
  end
  get '/' do
    'Hello, world!'
  end 
end
Run Code Online (Sandbox Code Playgroud)

我这样开始(不建议使用Rack):

Front.start!
Run Code Online (Sandbox Code Playgroud)

这是Puma的配置对象,我不知道如何传递给它:

require 'puma/configuration'
Puma::Configuration.new({ log_requests: true, debug: true })
Run Code Online (Sandbox Code Playgroud)

说真的,怎么样?

ruby sinatra puma

5
推荐指数
2
解决办法
507
查看次数

标签 统计

sinatra ×10

ruby ×8

gem ×2

rack ×2

deployment ×1

erb ×1

eventmachine ×1

hash ×1

json ×1

puma ×1

ruby-on-rails ×1

runtime-error ×1

thin ×1

twitter ×1

webrick ×1