标签: sinatra

Sinatra:提供普通旧文件的正确方法是什么?

这是有效的,但它是在黑暗中刺伤.我知道Ruby很少.

为给定资源提供普通旧文件的可接受方式是什么?

get '/xyz' do
    File.read 'abc.html'
end
Run Code Online (Sandbox Code Playgroud)

ruby sinatra

13
推荐指数
1
解决办法
6127
查看次数

如何使用Sinatra提供XML文档?

我有一些XML文档,我想从Sinatra服务器.我做了一些搜索,但找不到具体的东西.我确实找到了构建器gem,但我不想从头开始构建文档.

我试着这样做

get '/'
  xml = '<?xml version=\"1.0\" encoding=\"UTF-8\"?> <name>My name</name> <age>90</age>'
  body xml
end
Run Code Online (Sandbox Code Playgroud)

但这会在它周围添加HTML标签.这可能是我非常缺乏的基础.你能指出我正确的方向吗?

ruby sinatra

13
推荐指数
1
解决办法
5459
查看次数

Sinatra具有持久变量

我的sinatra应用程序必须解析一个~60MB的XML文件.这个文件几乎没有变化:在夜间的cron工作中,它被另一个人覆盖.

是否存在将解析后的文件作为变量保存在内存中的技巧或方法,以便我可以在传入的请求中读取它,但不必为每个传入的请求一遍又一遍地解析它?

一些Pseudocode来说明我的问题.

get '/projects/:id'
  return @nokigiri_object.search("//projects/project[@id=#{params[:id]}]/name/text()")
end

post '/projects/update'
  if params[:token] == "s3cr3t"
    @nokogiri_object = reparse_the_xml_file
  end
end
Run Code Online (Sandbox Code Playgroud)

我需要知道的是,如何创建这样一个@nokogiri_object,以便在Sinatra运行时它仍然存在.这有可能吗?或者我需要一些存储空间吗?

ruby scope sinatra

13
推荐指数
2
解决办法
7011
查看次数

微框架意味着什么?

Ruby Sinatra和PerlDancer被称为"微网框架"?
微框架意味着什么?

微网框架是否适合大型项目(比如Stackoverflow,电子购物,房地产管理或......)?
微Web框架的最佳使用案例是什么?

ruby perl web-frameworks sinatra

13
推荐指数
2
解决办法
6046
查看次数

从TestCase调用Sinatra应用程序实例方法

我在一个Sinatra应用程序中有一个util方法,我想从我的测试中进行测试TestCase.

问题是我不知道如何调用它,如果我只是使用app.util_method我有错误NameError: undefined local variable or method 'util_method' for #<Sinatra::ExtendedRack:0x007fc0c43305b8>

my_app.rb:

class MyApp < Sinatra::Base
  # [...] routes methods

  # utils methods
  def util_method
    return "hi"
  end
end
Run Code Online (Sandbox Code Playgroud)

my_app_test.rb:

require "my_app.rb"
require "test/unit"
require "rack/test"

class MyAppTest < Test::Unit::TestCase
  include Rack::Test::Methods

  def app
    MyApp.new
  end

  # [...] routes methods tests

  def test_util_method
    assert_equal( "hi", app.util_method )
  end
end
Run Code Online (Sandbox Code Playgroud)

ruby rack sinatra

13
推荐指数
1
解决办法
3542
查看次数

你如何在Sinatra中选择你的HTTP服务器?

我在本地运行Sinatra应用程序.

自从我安装了Thin之后,我的Sinatra应用程序总是将它用作Web服务器.但是,我一直在使用Thin提供应用程序所需的大量静态文件的性能问题,我想切换到Mongrel或WEBrick.

我似乎无法弄清楚如何将我的应用程序切换到Mongrel或WEBrick.即使我放在app.rb的顶部require 'mongrel'或者require 'webrick'在我的顶部ruby app.rb,Sinatra仍然以Thin开头.

所以,我的问题是:如何指定Sinatra的Web服务器在开发模式下使用?另外,我怎么能在生产模式下这样做?

rack mongrel thin webrick sinatra

13
推荐指数
1
解决办法
9798
查看次数

为什么我收到错误"db_name必须是字符串或符号"?

快速版本(对于那些熟悉Mongoid西纳特拉):如果它是不是/SYCK YAML的解析问题,为什么别人可以,我得到尝试连接到使用Mongoid MongoDB数据库时,这个错误?(或者也许就是那个问题,在这种情况下,如何修复我的mongoid.yml文件,发布在下面?)


更详细(原始)版本:

我有一个Sinatra应用程序通过Mongoid与MongoDB数据库交互:

configure do
    Mongoid.load!('config/mongoid.yml')
end
Run Code Online (Sandbox Code Playgroud)

我的mongoid.yml文件看起来像这样:

development:
    host: localhost
    database: project_development

test:
    host: localhost
    database: project_test

production:
    uri: <%= ENV['MONGOLAB_URI'] %>
Run Code Online (Sandbox Code Playgroud)

每当我尝试以某种方式与数据库交互时,我得到错误db_name必须是字符串或符号.

现在,我在谷歌上发现了大量有关此事的信息; 但我能找到的一切似乎表明问题与Ruby有关,现在使用Psyche YAML解析器而不是旧的Syck解析器.我不认为这在我的案例中实际上是相关的,因为据我所知,上述YAML应该可以完全解析.

(对于它的价值,不过,我已经使用了试图YAML::ENGINE.yamler= 'syck'伎俩,都无济于事.我得到了确切的相同的错误消息.)

当我将配置更改为:

Mongoid.configure do |config|
    name = "project_development"
    host = "localhost"
    config.master = Mongo::Connection.new.db(name)
end
Run Code Online (Sandbox Code Playgroud)

......然后一切正常.所以我知道MongoDB正在我的机器上工作.特别是当我使用YAML文件时出现问题.

什么给出了什么?

yaml sinatra mongodb mongoid

12
推荐指数
1
解决办法
3492
查看次数

使用bundle exec可以解决这个问题吗?

这是我的 Gemfile

source :rubygems

gem 'rake', '0.9.2.2'
gem 'sinatra'
gem 'activerecord', '3.0.9'
gem 'pg', '~> 0.12.2'
gem 'logger'
gem 'nokogiri'

group :development, :test do
  gem 'rack-test'
  gem 'ruby-debug19'
  gem 'sqlite3'
end
Run Code Online (Sandbox Code Playgroud)

rake console在其他项目中运行,现在我收到此消息:

You have already activated activesupport 3.1.3, but your Gemfile requires activesupport 3.0.9. Using bundle exec may solve this.

我如何使用`bundle exec来解决这个问题?这是什么意思?

ruby gem rubygems sinatra bundler

12
推荐指数
3
解决办法
1万
查看次数

在ruby/ActiveRecord中生成类似Instagram或Youtube的不可语句字符串ID

在创建给定的ActiveRecord模型对象的实例时,我需要生成一个短的(6-8个字符)唯一字符串,用作URL中的标识符,采用Instagram的照片URL样式(如http://instagram.com/ p/P541i4ErdL /,我刚刚加入404)或Youtube的视频网址(如http://www.youtube.com/watch?v=oHg5SJYRHA0).

这样做的最佳方法是什么?最简单的方法是重复创建一个随机字符串,直到它是唯一的?有没有办法散列/随机播放整数id,以便用户不能通过更改一个字符来破解URL(就像我上面的404'd Instagram链接那样)并最终获得新记录?

ruby postgresql activerecord sinatra

12
推荐指数
2
解决办法
4688
查看次数

Sinatra的未定义方法`desc':: Application:Class

这是我运行任何rake命令时得到的错误:undefined method 'desc' for Sinatra::Application:Class

# app.rb
require 'sinatra'
require 'sinatra/activerecord'
require 'sinatra/contrib'

get '/' do
  puts "Hello World"
end

# config.ru
require "./app"
run Sinatra::Application

# Rakefile
require './app'
require 'sinatra/activerecord/rake'

# Gemfile
source 'https://rubygems.org'
ruby '2.0.0'

gem 'activerecord', '~> 4.0.2'
gem 'sinatra', '~> 1.4.4'
gem 'sinatra-activerecord', '~> 1.2.3'
gem 'sinatra-contrib', '~> 1.4.2'
Run Code Online (Sandbox Code Playgroud)

完整跟踪:

/Users/j/.rvm/gems/ruby-2.0.0-p247/gems/sinatra-contrib-1.4.2/lib/sinatra/namespace.rb:269:in `method_missing'
/Users/j/.rvm/gems/ruby-2.0.0-p247/gems/sinatra-activerecord-1.2.3/lib/sinatra/activerecord/tasks.rake:4:in `block in <top (required)>'
/Users/j/.rvm/gems/ruby-2.0.0-p247/gems/sinatra-contrib-1.4.2/lib/sinatra/namespace.rb:126:in `class_eval'
/Users/j/.rvm/gems/ruby-2.0.0-p247/gems/sinatra-contrib-1.4.2/lib/sinatra/namespace.rb:126:in `block in new'
/Users/j/.rvm/gems/ruby-2.0.0-p247/gems/sinatra-contrib-1.4.2/lib/sinatra/namespace.rb:118:in `initialize'
/Users/j/.rvm/gems/ruby-2.0.0-p247/gems/sinatra-contrib-1.4.2/lib/sinatra/namespace.rb:118:in `new'
/Users/j/.rvm/gems/ruby-2.0.0-p247/gems/sinatra-contrib-1.4.2/lib/sinatra/namespace.rb:118:in `new'
/Users/j/.rvm/gems/ruby-2.0.0-p247/gems/sinatra-contrib-1.4.2/lib/sinatra/namespace.rb:142:in `namespace'
/Users/j/.rvm/gems/ruby-2.0.0-p247/gems/sinatra-1.4.4/lib/sinatra/base.rb:1972:in …
Run Code Online (Sandbox Code Playgroud)

ruby rake sinatra

12
推荐指数
2
解决办法
3781
查看次数