我正在努力解决一个奇怪的问题.根据http://github.com/sinatra/sinatra(secion Filters),在Sinatra 1.0中的过滤器块之后可以使用响应对象.但是响应.status是可以正确访问的,我在过滤后看不到来自我的路由里面的非空响应.
我有这个架子文件:
config.ru
require 'app'
run TestApp
Run Code Online (Sandbox Code Playgroud)
然后使用以下方法安装Sinatra 1.0.b gem:
gem install --pre sinatra
Run Code Online (Sandbox Code Playgroud)
这是我的小应用程序,只有一条路线:
app.rb
require 'rubygems'
require 'sinatra/base'
class TestApp < Sinatra::Base
set :root, File.dirname(__FILE__)
get '/test' do
'Some response'
end
after do
halt 500 if response.empty? # used 500 just for illustation
end
end
Run Code Online (Sandbox Code Playgroud)
现在,我想访问后过滤器内的响应.当我运行这个应用程序并访问/测试 URL时,我得到了500响应,好像响应是空的,但响应显然是"一些响应".
随着我对/ test的请求,浏览器发出了对/favicon.ico的单独请求,并且由于没有路由或静态文件而返回404.但我希望返回500状态,因为响应应为空.
在控制台中,我可以看到在后过滤器中,对/favicon.ico的响应类似于"未找到",并且对/ test的响应确实为空,即使路由返回了响应.
我错过了什么?
我是Ruby语言的新手(到目前为止我是用Groovy + Grails开发的)但是因为我很好奇它,我想在Ruby 1.9.2-p0上尝试Sinatra.
我有一个简单的网站,其中包含/mywebpage2个文件:
# blog.rb
get '/' do
'Hello World!'
end
get '/impossible' do
haml :index
end
Run Code Online (Sandbox Code Playgroud)
和
#config.ru
path = File.expand_path "../", __FILE__
$LOAD_PATH << (File.expand_path ".") + "/views"
require 'haml'
require 'sinatra'
require "#{path}/blog"
run Sinatra::Application
Run Code Online (Sandbox Code Playgroud)
然后在同一个文件夹中我有一个/views/包含的文件夹index.haml.
我尝试运行服务器,rackup -p8080但当我尝试得到/impossible以下错误时:
Errno::ENOENT at /impossible
No such file or directory - /home/jack/mywebpage/<internal:lib/rubygems/views/index.haml
Run Code Online (Sandbox Code Playgroud)
通过互联网搜索,似乎这可能是由"."引起的.没有被包括在内$LOAD_PATH所以我试图添加它或直接添加视图,./views以便实际上$LOAD_PATH.inspect给我正确的路径:..., "/home/jack/mywebpage/views"]
但它仍然似乎没有用.作为框架和语言的新手,我想知道我是否做错了什么.任何线索?
我正在写一个很小的Sinatra应用程序,为了简单起见,我想在Heroku上托管它.但是,我所拥有的是一个废弃一些网站并每小时向我的数据库中添加一些数据的任务.目前,这只是作为需要执行的ruby脚本编写的.Heroku有一个基于rake的cron工作.现在,如果这是一个rails应用程序,我可以很容易地做到这一点,但我想避免杂乱的事情这么简单.
有办法避免这种情况吗?或者我是否必须使用我的应用程序安装rake?
谢谢.
埃里克
我有一个简单的sinatra应用程序.
require 'rubygems'
require 'sinatra'
get '/' do
"Hello"
end
Run Code Online (Sandbox Code Playgroud)
当我在Shotgun上运行它时,我收到以下错误:
引导错误
加载simple.rb时出错了
LoadError:没有要加载的文件 - simple.rb
:29:in
require' <internal:lib/rubygems/custom_require>:29:inrequire'/home/thedinga/.rvm/gems/ruby-1.9.2-p0@global/gems/shotgun-0.8/lib/shotgun/loader.rb : 114 :ininner_app' /home/thedinga/.rvm/gems/ruby-1.9.2-p0@global/gems/shotgun-0.8/lib/shotgun/loader.rb:102:inassemble_app'/ home/thedinga/.rvm/gems/ruby-1.9.2-p0 @ global/gems/shotgun-0.8/lib/shotgun/loader.rb:86:inproceed_as_child' /home/thedinga/.rvm/gems/ruby-1.9.2-p0@global/gems/shotgun-0.8/lib/shotgun/loader.rb:31:incall!' /home/thedinga/.rvm/gems/ruby-1.9.2-p0@global/gems/shotgun-0.8/lib/shotgun/loader.rb:18:incall' /home/thedinga/.rvm/gems/ruby-1.9.2-p0@global/gems/shotgun-0.8/lib/shotgun/favicon.rb:12:incall'/home/thedinga/.rvm/gems/ruby -1.9.2-p0@global/gems/rack-1.2.1/lib/rack/builder.rb:77:incall' /home/thedinga/.rvm/gems/ruby-1.9.2-p0@global/gems/rack-1.2.1/lib/rack/content_length.rb:13:incall'/home/thedinga/.rvm/gems/ruby-1.9.2-p0@global/ gems/rack-1.2.1/lib/rack/handler/webrick.rb:52:inservice' /home/thedinga/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/webrick/httpserver.rb:111:inservice' /home/thedinga/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/ webrick /httpserver.rb:70:in start_thread中的run' /home/thedinga/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/webrick/server.rb:183:in块'
如果我使用ruby simple.rb而不是使用猎枪,我会在浏览器中获得您期望的输出.作为旁注,如果我将它推送到Heroku(我真的想要运行sinatra应用程序),Heroku也将无法运行应用程序.这是1.9.2的版本问题吗?还是我错过了别的什么?
我有一个Sinatra应用程序,我计划在Heroku上托管.
该应用程序部分地从网络周围的其他页面中抓取大量信息并将信息存储到数据库中.这些报废操作是一个缓慢的过程,所以我需要它们在与我的Sinatra应用程序分开的另一个线程/进程中运行.
我的计划只是为每个进程提供一个按钮,我可以单击该按钮,并且将在后台进行报废.
我不确定什么是最好的方法来做到这一点,复杂的是Heroku允许的.
我有这个haml/mustache模板:
{{#data}}
ok
{{#items}}
{{#item}}
%b ID: {{id}}
{{/item}}
{{/items}}
{{/data}}
Run Code Online (Sandbox Code Playgroud)
我有Illegal nesting: nesting within plain text is illegal错误.
我在Sinatra渲染它
Mustache.render(haml(:index), hash)
Run Code Online (Sandbox Code Playgroud) 缩短版本:
使用用于sinatra的omniauth gem,我无法使rspec登录正常工作并保持会话可用于后续请求。
根据http://benprew.posterous.com/testing-sessions-with-sinatra的建议并关闭会话,我将问题归结为:
app.send(:set, :sessions, false) # From http://benprew.posterous.com/testing-sessions-with-sinatra
get '/auth/google_oauth2/callback', nil, {"omniauth.auth" => OmniAuth.config.mock_auth[:google_oauth2] }
# last_request.session => {"uid"=>"222222222222222222222", :flash=>{:success=>"Welcome"}}
# last_response.body => ""
follow_redirect!
# last_request.session => {:flash=>{}}
# last_response.body => Html for the homepage, which is what I want
Run Code Online (Sandbox Code Playgroud)
如何使rspec遵循重定向并保留会话变量?锡那特拉有可能吗?
从http://benprew.posterous.com/testing-sessions-with-sinatra看来,我不得不在我需要登录的每个get / post请求上发送会话变量,但这在重定向的情况。
细节:
我正在尝试通过以下设置在sinatra中使用omniauth gem:
spec_helper.rb
ENV['RACK_ENV'] = 'test'
# Include web.rb file
require_relative '../web'
# Include factories.rb file
require_relative '../test/factories.rb'
require 'rspec'
require 'rack/test'
require 'factory_girl'
require 'ruby-debug'
# Include …Run Code Online (Sandbox Code Playgroud) 在这里阅读文档,https://devcenter.heroku.com/articles/scheduler,我看到如何使用rails安排任务.但我想知道如何使用常规红宝石安排任务?
我必须在任务字段中放置什么来运行我的ruby脚本?
我new to Ruby和我被要求在我们的新项目中使用它.我们也被要求Padrino (Sinatra)用作后端/框架.为了测试我们被要求使用Rspec.我一直在寻找可以指导的教程using Rspec for Ruby on Padrino.我得到的主要是参考RoR.但是,我需要Ruby on Padrino.
任何入门/指南/参考/讨论等都请指导我.
如果我在任何地方都错了,请纠正我.可能是我没有为我的问题搜索正确的单词/短语组合.
我正在使用Ruby 1.9.3和Padrino v.0.10.6.
注意:我也提到了SO问题,但没有帮助.
Sinatra是所有标题名称的骆驼套管,导致'P3P'出现问题.码:
require 'rubygems'
require 'sinatra'
configure :production do
# Configure stuff here you'll want to
# only be run at Heroku at boot
# TIP: You can get you database information
# from ENV['DATABASE_URI'] (see /env route below)
end
# Quick test
get '/track' do
#response.headers['Cache-Control'] = 'public, max-age=300'
response.set_cookie("visited",1)
response['this-that'] = "CP=\"CAO DSP COR CURa ADMa DEVa OUR IND PHY ONL UNI COM NAV INT DEM PRE\""
response['P3P'] = "CP=\"CAO DSP COR CURa ADMa DEVa OUR IND PHY ONL …Run Code Online (Sandbox Code Playgroud)