标签: sinatra

使用sinatra在块之间传递数据

我正在尝试使用sinatra在块之间传递数据.例如:

@data = Hash.new
post "/" do
   @data[:test] = params.fetch("test").to_s
   redirect "/tmp"
end

get "/tmp" do
   puts @data[:test]
end
Run Code Online (Sandbox Code Playgroud)

但是每当我到达tmp块时@data都是nil并抛出一个错误.这是为什么?

ruby sinatra

10
推荐指数
1
解决办法
3083
查看次数

Sinatra,上传表格中的进度条

我正在开发一个包含上传表单的Sinatra应用程序,其中包含一个进度条,指示已完成上载的内容.如ryan dahl所述,该过程如下:

HTTP上传进度条相当混淆 - 它们通常涉及在服务器上运行的进程,跟踪HTTP服务器正在写入的临时文件的大小,然后在客户端,每隔几秒就向服务器发出一次AJAX调用.上传以询问上传进度.

每个上传都有一个随机的session-id,并跟踪我class variable在我的应用程序中使用的关联(我知道,这太可怕了 - 如果你有更好的想法,请告诉我)

configure do
  @@assoc = {}
end
Run Code Online (Sandbox Code Playgroud)

我有一个POST上传的路由,GET一个用于AJAX轮询的路由.内部POST路线我保存的关联session-id,Tempfile以及总规模.

post '/files' do
  tmp = params[:file][:tempfile]
  # from here on, @@assoc[@sid] should have a value, even in other routes
  @@assoc[@sid] = { :file => tmp, :size => env['CONTENT_LENGTH'] } 
  File.open("#{options.filesdir}/#{filename}", 'w+') do |file|
    file << tmp.read
  end
end 
Run Code Online (Sandbox Code Playgroud)

GET路线中,我根据Tempfile当前的大小计算百分比:

get '/status/:sid' do
  h = …
Run Code Online (Sandbox Code Playgroud)

ruby iframe mongrel file-upload sinatra

10
推荐指数
1
解决办法
1808
查看次数

ActiveRecord连接警告.(数据库连接不会自动关闭)

我正在尝试用Sinatra和ActiveRecord(3.2.3)创建一个小应用程序.

这是我的主文件的样子:

require "sinatra"
require "sinatra/reloader"
require "active_record"
...

ActiveRecord::Base.establish_connection(
  adapter:  'sqlite3',
  database: 'db.sqlite3',
  host:     'localhost',
)

class Post < ActiveRecord::Base
  ...
end

get('/') { ... }
get('/posts') { ... }
...
Run Code Online (Sandbox Code Playgroud)

它有效,但有时我会在控制台中收到警告:

弃用警告:数据库连接不会自动关闭,请通过调用连接关闭线程末尾的数据库close连接.例如:ActiveRecord :: Base.connection.close'

发生警告时,页面刷新需要很长时间.我不明白我应该在哪里关闭连接.我试图放在 ActiveRecord::Base.connection.close文件的底部,但它没有帮助.

更新:

我忘了提到我还使用来自sinatra-contrib gem的sinatra/reloader插件来查看效果,而无需重新启动服务器.

require "sinatra/reloader"
Run Code Online (Sandbox Code Playgroud)

如果我发表评论,那么问题就会消失.但无论如何,我想知道如何在不禁用重新加载器的情况下解决问题.

ruby activerecord sinatra

10
推荐指数
2
解决办法
6894
查看次数

如何在没有机架文件的情况下将Sprockets与Sinatra一起使用?

我正在编写一个带有通过Thor启动的嵌入式Sinatra应用程序的库.我想挂载Sprockets::Environmentat的实例,/css并将/js主应用程序映射到/.这Rack::URLMapconfig.ru文件中很容易使用,但在这种情况下没有一个因为我以编程方式启动Sinatra应用程序Sinatra::Application.run!.我怎样才能做到这一点?

rack sinatra sprockets

10
推荐指数
2
解决办法
3957
查看次数

Sinatra没有坚持使用Chrome重定向会话

Sinatra没有通过重定向Chrome来坚持我的会话.它正在创建一个全新的会话,我将丢失以前的所有会话数据.

作为一个例子(类似于Sinatra文档),我正在做这样的事情:

enable :sessions

get '/foo' do
  session[:user_id] = 123
  session[:session_id] # "ABC", for example

  redirect to('/bar')
end

get '/bar' do
  # this is "DEF" when responding to Chrome (wrong), 
  # but "ABC" when responding to Firefox or Safari (right)
  session[:session_id]

  # this is nil when responding to Chrome (wrong),
  # but 123 when responding to Firefox or Safari (right)
  session[:user_id]
end
Run Code Online (Sandbox Code Playgroud)

我认为这与重定向响应后不同浏览器如何响应处理会话有关.有没有人看过类似这样的东西,或者对仍在使用会话时如何解决这个问题有任何想法?

提前致谢!

ruby session google-chrome sinatra

10
推荐指数
1
解决办法
2073
查看次数

在Sinatra中加载样式表

我正在使用Sinatra,我一直在尝试加载一些样式表.我link在我的erb中尝试过普通的html 标签,但是没有用.

我试过了

<head>
  <link href="style.css" rel="stylesheet" type="text/css" />
</head>
Run Code Online (Sandbox Code Playgroud)

这不是我正在使用的网址的问题,是否有一些特殊的方法来实现这一目标?

sinatra

10
推荐指数
1
解决办法
6712
查看次数

Angular.js与Sinatra

我想在我的Sinatra应用程序中使用Angular.js.不幸的是,我找不到任何有用的提示.我确实找到了一些Rails示例,但与Sinatra的简约哲学相比,我总是发现Rails和Padrino相当难以处理.

我观看了很多视频(由Googling angular.js发现),但我仍然觉得很难申请Sinatra.

最全面的教程中,我发现到目前为止是一个从yearofmoo.com.

但是我仍然试图将它应用于Sinatra,而且我的出路也不是一种选择,因为一个简单的错误可能会让我走上正确的道路.我迷路了,我承认了!!

如果共享的话,根据您尝试做类似事情的经验,我们将非常感激.此时我需要的是将我的JSON从Sinatra应用程序路径到angular.js驱动的页面.

谢谢.

javascript sinatra angularjs

10
推荐指数
1
解决办法
9348
查看次数

无法通过本地网络访问sinatra应用程序

我有rails应用程序.如果我用rails s(端口3000)启动它,它可以在我的机器和本地网络上的每个设备上通过ip地址(在我的情况下为192.168.0.3)完美地工作.
我有sinatra申请.如果我使用ruby app.rb(端口4567)启动它,它在我的机器上完美运行,但它无法从我本地网络上的其他设备访问.

在此输入图像描述

两个应用程序都使用Thin作为应用服务器.

这与sinatra如何运作有关吗?

ruby-on-rails sinatra local-network

10
推荐指数
3
解决办法
4119
查看次数

Pow:错误:超时:等待/tmp/nack.*.*.sock

每当我尝试通过Pow打开本地应用程序时,我都会遇到以下错误(*=数字):

Error: timeout: waiting for /tmp/nack.*.*.sock
    at null._onTimeout (/Users/pain/Library/Application Support/Pow/Versions/0.4.1/node_modules/nack/lib/process.js:416:29)
    at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)
Run Code Online (Sandbox Code Playgroud)

刷新几次后,应用程序启动并正常工作.但是,在离开一段时间之后,每次都做起来很烦人.

这是预期的行为吗?有没有办法增加超时?

更新:

$ time rails runner "puts 1"
4.72s user 1.32s system 28% cpu 21.198 total # first time after reboot
3.73s user 0.68s system 99% cpu 4.424 total # after that
Run Code Online (Sandbox Code Playgroud)

更新:

事实上同样的事情适用于Sinatra应用程序,它本身很快就开始了.并且几乎立即显示超时消息,看起来根本没有实际的超时.然后在第二页刷新它工作正常.

更新:

只需要启动一个半静态的Sinatra应用程序,比如它出现之前的5或6次.是什么赋予了?该应用程序几乎是即时的.

rack ruby-on-rails sinatra rack-pow

10
推荐指数
0
解决办法
1188
查看次数

从Sinatra访问标题

我试图访问sinatra过滤器中的标头.我的请求包括标题"HTTP_AUTH",但我无法访问它.我的过滤器是

before do
    halt 403 unless request['HTTP_AUTH'] == 'test'
end
Run Code Online (Sandbox Code Playgroud)

它从我的机架测试中正常工作.

browser.get '/mypath', "CONTENT_TYPE" => "application/json", "HTTP_AUTH" => 'test'
Run Code Online (Sandbox Code Playgroud)

但是当我从其他来源尝试时,我无法访问它.如果我puts request.env可以看到令牌在请求中,但我无法访问它.

"HTTP_CONNECTION"=>"close", 
"HTTP_AUTH"=>"test", 
"HTTP_ACCEPT"=>"application/json", 
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

ruby sinatra http-headers

10
推荐指数
2
解决办法
2万
查看次数