所以我试图想出一种方法来为一个Sinatra应用程序在rspec中存储一个控制器方法.其主要原因是测试应用程序的逻辑流程,并确保在满足某些条件时调用必要的函数.所以,从本质上讲,我希望能够做类似的事情
controller.should_receive(:fancy_method).and_return("This is a string")
Run Code Online (Sandbox Code Playgroud)
我遇到的困难是访问sinatra应用程序中的控制器实例.我能够使用sinatra控制器类上的class_eval覆盖当前函数,但我想断言这些函数实际运行.
有人有什么建议吗?
谢谢.
我有一个小的Sinatra应用程序,它从ERB模板为我生成html片段.
我如何html_escape输出?
Sinatra中不存在<%= h somestring%>帮助器.
我有一个我在Heroku上运行的小型Sinatra应用程序,它使用单个管理员密码,以及一些API身份验证密钥.
哪里是存放这些东西的最佳地点?我是否将它们放在环境变量中,然后使用
heroku config:add ADMIN_PASSWORD=foobar
Run Code Online (Sandbox Code Playgroud)
?或者我使用包含它们的配置文件,我只是不提交配置文件?
response = Typhoeus::Request.get("http://localhost:3000/api/api_email/#{@api_id}.json")
JSON.parse(response.body)
Run Code Online (Sandbox Code Playgroud)
响应是一个JSON对象,但在尝试解析它时出错.
undefined method `bytesize' for
Run Code Online (Sandbox Code Playgroud)
我想访问JSON对象.
错误:
NoMethodError at /api/v1/a71040739d6cc50e89aff56601af67/2011-10-1
undefined method `bytesize' for {"xpto"=>{"email
"=>"test@gmail.com"}}:Hash
file: utils.rb location: bytesize line: 239
Run Code Online (Sandbox Code Playgroud)
回溯:
/Users/donald/.rvm/rubies/ruby-1.9.2-rc2/lib/ruby/1.9.1/webrick/httpserver.rb in service
si.service(req, res)
/Users/donald/.rvm/rubies/ruby-1.9.2-rc2/lib/ruby/1.9.1/webrick/httpserver.rb in run
server.service(req, res)
/Users/donald/.rvm/rubies/ruby-1.9.2-rc2/lib/ruby/1.9.1/webrick/server.rb in block in start_thread
block ? block.call(sock) : run(sock)
Run Code Online (Sandbox Code Playgroud)
这是如何生成的:
@api_id = params[:api_id]
@bucket = Bucket.where(:api => @api_id)
respond_with(@bucket, :only => [:email])
Run Code Online (Sandbox Code Playgroud)
返回的.json文件包含:
[{"xpto":{"email":"test@gmail.com"}}]
Run Code Online (Sandbox Code Playgroud) 当我通过HTTPS访问时,我需要测试页面上某些元素的行为 - 我想知道如何使用HTTPS在本地测试这个sinatra应用程序.如果我的问题甚至没有意义,我很抱歉,但我想通过HTTPS通过我的网络浏览器连接到localhost.
我刚开始使用Ruby,我正在玩Sinatra,但找不到在请求之间共享数据库连接的方法.
我来自Java web developpement,你要做的一件事就是集中数据库连接,所以我确信Ruby中存在类似的东西,但我找不到它.
ActiveRecord和DataMapper提供此功能,但我不需要ORM,只想进行常规SQL查询.
Sinatra是否有一些特定的方法,或者所有基于Rack的应用程序都有通用的方法?
我正在尝试将Bootstrap添加到Sinatra应用程序中.我有设置路由编译bootstrap.less和responsive.less.在Web浏览器中单独加载两个样式表按预期方式工作.但是当我尝试在html页面中使用它们时,我的应用程序就会挂起.我只能停止申请kill -9.
似乎以某种方式减少导入和多个样式表会导致应用程序挂起.我能够找出问题所在:
app.rb
require 'rubygems'
require 'bundler/setup'
require 'sinatra'
require 'less'
get '/' do
haml :index
end
get '/style1.css' do
less :style1, :paths => ['views']
end
get '/style2.css' do
less :style2, :paths => ['views']
end
Run Code Online (Sandbox Code Playgroud)
意见/ index.haml
!!! 5
%html
%head
%title Hello World
%link{'rel' => 'stylesheet', 'href' => 'style1.css', 'type' => 'text/css'}
%link{'rel' => 'stylesheet', 'href' => 'style2.css', 'type' => 'text/css'}
%body
%h1 Hello World
%p Hello World
Run Code Online (Sandbox Code Playgroud)
意见/ style1.less
@import "mixins.less"; …Run Code Online (Sandbox Code Playgroud) 我正在尝试运行以下Sinatra应用程序并收到一条错误消息,告诉我无法启动服务器,因为端口已经在使用或因为我没有root权限.在启动Sinatra应用程序之前,我从未遇到过这个问题.几天前我更新了Mountain Lion以获取我的mac,并想知道这可能是导致问题的原因.我也使用RVM.任何人都可以提出建议......
require "sinatra"
class MyApp < Sinatra::Base
get '/' do
"Hello from MyApp"
end
end
== Sinatra/1.3.3 has taken the stage on 4567 for development with backup from Thin
>> Thin web server (v1.5.0 codename Knife)
>> Maximum connections set to 1024
>> Listening on 0.0.0.0:4567, CTRL+C to stop
/Users/me/.rvm/gems/ruby-1.9.2-p290@global/gems/eventmachine-1.0.0/lib/eventmachine.rb:526:in `start_tcp_server': no acceptor (port is in use or requires root privileges) (RuntimeError)
Run Code Online (Sandbox Code Playgroud)
更新:我仍然可以在我的机器上运行rails服务器,所以我认为问题是针对Sinatra的.此外,几天前,当我开始使用这个指导我明确设置端口的Rack Tutorial时,我能够运行Sinatra应用程序 .我想知道这是否会永久改变.
>> Rack::Handler::WEBrick.run my_rack_proc, :Port => 9876
[2011-10-24 11:32:21] INFO WEBrick 1.3.1
[2011-10-24 …Run Code Online (Sandbox Code Playgroud) 当我用机架和美洲狮开始我的Sinatra应用程序时出错.我的config.ru文件看起来像这样:
#\ -s puma
require './controller/main.rb'
run Sinatra::Application
Run Code Online (Sandbox Code Playgroud)
因此,当我现在使用rackup时,我收到此错误:
/home/username/.rvm/gems/ruby-1.9.3-p392/gems/rack-1.5.2/lib/rack/handler.rb:76:in"require":无法加载此类文件 - 机架/处理程序/ puma(LoadError)
我用ruby 1.9.3p392(2013-02-22修订版39386)[i686-linux]
我的第一个想法是我忘了安装美洲狮,或者美洲狮在某种程度上被打破了.所以我尝试过:
puma -v
puma version 2.0.1
Run Code Online (Sandbox Code Playgroud)
我直接用ruby开始它:
ruby controller/main.rb
Puma 2.0.1 starting...
* Min threads: 0, max threads: 16
* Environment: development
* Listening on tcp://localhost:4567
Run Code Online (Sandbox Code Playgroud)
我发现了这个美洲狮问题,但我找不到真正的解决方案.
为什么要发生这种情况?
我怎样才能解决这个问题?
*我希望在我的Sinatra应用程序中运行自定义Rake任务但我会继续rake aborted!
Don't know how to build task 'greet'.
这是greet.rake用于测试目的的自定义Rake任务():
task :greet do
puts "Hello!"
end
Run Code Online (Sandbox Code Playgroud)
我已经把greet.rake在./lib/tasks(滑轨).我猜Rake无法找到该文件的正确目录.
如何在Sinatra中运行自定义Rake任务?
我正在使用Ruby 2.0.0和Sinatra 1.4.4.
Rakefile现在看起来像这样:
require "./app"
require "sinatra/activerecord/rake"
require "./lib/tasks"
Run Code Online (Sandbox Code Playgroud)
使用时:
rake greet
Run Code Online (Sandbox Code Playgroud)
我明白了:
rake aborted!
cannot load such file -- ./lib/tasks
/Users/*/.rvm/gems/ruby-2.0.0-p247@global/gems/activesupport- 4.0.1/lib/active_support/dependencies.rb:229:in `block in require'
/Users/*/.rvm/gems/ruby-2.0.0-p247@global/gems/activesupport- 4.0.1/lib/active_support/dependencies.rb:214:in `load_dependency'
/Users/*/.rvm/gems/ruby-2.0.0-p247@global/gems/activesupport-4.0.1/lib/active_support/dependencies.rb:229:in `require'
/Users/*/Dropbox/Development/Sinatra/sinatra-mp-experiment/Rakefile:3:in `<top (required)>'
(See full trace by running task with --trace)
Run Code Online (Sandbox Code Playgroud)