我有一个关于在Sinatra上使用机架安装的问题。我有两个经典风格的Sinatra应用程序。让我们调用app.rb中定义的一个App和api.rb中定义的另一个API。我希望api.rb处理所有以“/api”开头的路由,而app.rb处理所有其他请求,包括根(“/”)。我如何使用机架安装方式进行设置?或者有比这更好的解决方案吗? 最佳答案 我认为您会更喜欢Rack::URLMap-它可能看起来像这样:runRack::URLMap.new("/"=>App.new,"/api"=>Api.new)这应该放在您的config.ru文件
我正在尝试检查查找方法是否返回结果。我的查找方法如下:post=Post.find(:all,:conditions=>{:url=>params['url']},:limit=>1)检查post是否包含结果的好方法是什么? 最佳答案 find:all如果没有返回任何行,则返回一个空数组([]),因此您可以这样使用它:post=Post.find(:all,:conditions=>{:url=>params['url']},:limit=>1)unlesspost.empty?#dosomething...end顺便说一句,如果您
我有一个简单的Sinatra应用程序。web.rb:require'sinatra'get'/'do"Hello"endgem文件:*source:rubygemsgem'sinatra','1.1.0'gem'thin','1.2.7'config.ru:require'./web'runSinatra::Application但是当我在Heroku上部署我的应用程序时,我会在日志中收到错误消息:2012-03-27T19:17:48+00:00heroku[router]:ErrorH14(Nowebprocessesrunning)->GETfurious-waterfall-6
enable:sessionsset:session_secret,'secret'post'/login'dosession[:loggedInUser]=jsondata['username'].to_sputssession[:loggedInUser]+"isthesession"end此时一切都很好。当我这样阅读session时:get'/debug'dosession.inspectend它都在那里。但问题来了。当我稍后去另一个帖子请求时:post'/foo'do#donothingendsession被清除。为什么?这是错误吗?编辑我已经缩小了问题的范围:我通过nginx
我的一个AR模型中有以下代码片段:after_update:cache_bust模型中的cache_bust方法接受一个参数(bool值),默认将其自身的值设置为false。如何从上面定义的ActiveRecord回调中将true传递给模型中的这个方法?例如:after_update:cache_bust(true)不起作用,因为它是一个符号,我如何将true传递给方法的参数? 最佳答案 Therearefourtypesofcallbacksacceptedbythecallbackmacros:Methodreferences(
我已经成功地编写了一个小的Sinatra应用程序,并且已经成功地将它部署在了heroku上。但是我想在我的本地计算机上以开发模式运行该应用程序,并且我希望在将它推送到远程存储库后在heroku上以生产模式运行它。目前我可以实现这些选项中的任何一个。当我将config.ru更改为以下值时:require'rubygems'require'sinatra'require'sinatra/reloader'require"./calc.rb"enable:loggingset:environment,:developmentset:port,4567我可以通过rubyconfig.ru在本地
我正在尝试使用Project.find(id)从Project模型中找到一个项目,但它给了我ActiveRecord::StatementInvalid错误完整跟踪-PG::Error:ERROR:preparedstatement"a1"alreadyexists:SELECTCOUNT(*)FROMpg_classcLEFTJOINpg_namespacenONn.oid=c.relnamespaceWHEREc.relkindin('v','r')ANDc.relname=$1ANDn.nspname=ANY(current_schemas(false))/home/deploy
我需要以一种跨数据库(至少是SQLite、PostgreSQL、MySQL)可移植的方式在每个事务的基础上管理事务隔离级别。我知道我可以手动完成,就像那样:User.connection.execute('SETSESSIONTRANSACTIONISOLATIONLEVELSERIALIZABLE')...但我希望是这样的:User.isolation_level(:serializable)do#...end 最佳答案 此功能由ActiveRecord本身支持:MyRecord.transaction(isolation::re
现在,我做一个get'/'doset:base_url,"#{request.env['rack.url_scheme']}://#{request.env['HTTP_HOST']}"#...haml:indexend能够在HAMLindex.haml中使用options.base_url。但我确信有一种更好的、更干的方法可以做到这一点。然而我看不见,也找不到。(我是Sinatra的新手:))不知何故,在get之外,我没有可用的request.env,或者看起来是这样。所以把它放在一个包含中是行不通的。你如何获得你的基本网址? 最佳答案
我正在开发移动/VOIP领域的应用程序。这对我来说真的是一个灰色地带。以下是有关该应用程序的一些详细信息:这基本上就像一个自动充值/预付费移动服务与我之前编写的ERP应用程序相比,将具有中等复杂度的逻辑。响应中的View部分将是纯文本,将作为SMS/USSD拉取发送给用户,而语音XML(VXML)将作为IVR响应发送给用户。路由逻辑非常简单,因为对于每种回复类型,只有两到三个URL很重要。约束条件:我们在Perl中构建了核心系统(它是一个遗留系统,为许多其他VOIP/移动相关服务提供服务),以及一个用于跟踪损益的会计系统,但它变得非常复杂。所以我们决定单独做这个应用,只用SMS/USS