这是有效的,但它是在黑暗中刺伤.我知道Ruby很少.
为给定资源提供普通旧文件的可接受方式是什么?
get '/xyz' do
File.read 'abc.html'
end
Run Code Online (Sandbox Code Playgroud) 我有一些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标签.这可能是我非常缺乏的基础.你能指出我正确的方向吗?
我的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 Sinatra和PerlDancer被称为"微网框架"?
微框架意味着什么?
微网框架是否适合大型项目(比如Stackoverflow,电子购物,房地产管理或......)?
微Web框架的最佳使用案例是什么?
我在一个Sinatra应用程序中有一个util方法,我想从我的测试中进行测试TestCase.
问题是我不知道如何调用它,如果我只是使用app.util_method我有错误NameError: undefined local variable or method 'util_method' for #<Sinatra::ExtendedRack:0x007fc0c43305b8>
class MyApp < Sinatra::Base
# [...] routes methods
# utils methods
def util_method
return "hi"
end
end
Run Code Online (Sandbox Code Playgroud)
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) 我在本地运行Sinatra应用程序.
自从我安装了Thin之后,我的Sinatra应用程序总是将它用作Web服务器.但是,我一直在使用Thin提供应用程序所需的大量静态文件的性能问题,我想切换到Mongrel或WEBrick.
我似乎无法弄清楚如何将我的应用程序切换到Mongrel或WEBrick.即使我放在app.rb的顶部require 'mongrel'或者require 'webrick'在我的顶部ruby app.rb,Sinatra仍然以Thin开头.
所以,我的问题是:如何指定Sinatra的Web服务器在开发模式下使用?另外,我怎么能在生产模式下这样做?
快速版本(对于那些熟悉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文件时出现问题.
什么给出了什么?
这是我的 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来解决这个问题?这是什么意思?
在创建给定的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链接那样)并最终获得新记录?
这是我运行任何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)