Tag: sinatra

在Helicon Zoo上部署Sinatra模板

我使用Helicon Zoo在IIS和Windows Server 2008R2上安装了Ruby Hosting Package和Sinatra。 我使用IIS上的Web部署从Helicon Zoo Templates下载并导入了Sinatra模板 现在我在导航到网站时遇到此错误: [tid-7800168] paths need to start with / (ArgumentError) C:/Ruby19/lib/ruby/gems/1.9.1/gems/rack-1.4.1/lib/rack/urlmap.rb:30:in `block in remap’ C:/Ruby19/lib/ruby/gems/1.9.1/gems/rack-1.4.1/lib/rack/urlmap.rb:22:in `each’ C:/Ruby19/lib/ruby/gems/1.9.1/gems/rack-1.4.1/lib/rack/urlmap.rb:22:in `map’ C:/Ruby19/lib/ruby/gems/1.9.1/gems/rack-1.4.1/lib/rack/urlmap.rb:22:in `remap’ C:/Ruby19/lib/ruby/gems/1.9.1/gems/rack-1.4.1/lib/rack/urlmap.rb:18:in `initialize’ C:/Ruby19/lib/ruby/gems/1.9.1/gems/rack-1.4.1/lib/rack/builder.rb:142:in `new’ C:/Ruby19/lib/ruby/gems/1.9.1/gems/rack-1.4.1/lib/rack/builder.rb:142:in `generate_map’ C:/Ruby19/lib/ruby/gems/1.9.1/gems/rack-1.4.1/lib/rack/builder.rb:128:in `to_app’ C:/Zoo/Workers/ruby/lib/app.rb:45:in `build_app’ C:/Zoo/Workers/ruby/lib/app.rb:16:in `initialize’ C:/Zoo/Workers/ruby/lib/worker.rb:4:in `new’ C:/Zoo/Workers/ruby/lib/worker.rb:4:in `initialize’ C:/Zoo/Workers/ruby/zoorack.rb:30:in `new’ C:/Zoo/Workers/ruby/zoorack.rb:30:in `’ C:/Zoo/Workers/ruby/zoorack.rb:12:in `’ 有任何想法吗?

Sinatra将params 与字符串类型匹配,需要额外的转换才能匹配数据库ID?

我正在使用sinatra和DataMapper来访问sqlite3数据库。 当调用get(params[:id])时,我总是得到一个nil 。 但是当我打电话给get(params[:id].to_i)我可以得到正确的记录。 是否有任何错误,我必须明确地进行转换? sinatra应用程序很简单: class Record include DataMapper::Resource property :id, Serial …. end get ‘/list/:id’ do r = Record.get(params[:id]) … end

在sinatra应用程序中使用自定义布局选项时出现NameError

要在我的应用程序中使用自定义布局文件,我使用以下代码, set :views, File.dirname(__FILE__) + “/../views” set :public_folder, File.dirname(__FILE__) + “/../public” get ‘/’ do if !Db.empty? then haml :home, {:layout => :nosetup-layout} elsif request.ip == “127.0.0.1” then haml :setup, {:layout => :nosetup-layout} else haml :nosetup, {:layout => :nosetup-layout} end end 布局选项似乎有问题 我收到以下错误 undefined local variable or method `layout’ for # 那么,我哪里出错了?

我应该如何存储Twitter令牌,以便用户不必每次都去twitter_oauth?

我正在开发twitter应用程序,所以我使用twitter_oauth gem进行授权。 这是非常基本的代码。 因此,如果用户进入/登录它将用户重定向到Twitter登录,一旦他登录并单击授权应用程序,他将被重定向回我的网站。 begin callback = ENV[‘twitter_callback’] || “http://127.0.0.1:4567/login/success” request_token = @twitterClient.request_token(:oauth_callback => callback) MemcacheUtil::set(“request_token_twitter”, request_token, 3000) redirect request_token.authorize_url rescue Exception => e puts e.message puts e.backtrace.join(“\n”) raise Exception.new(“Something’s wrong with twitter!”) end 这就是我想做的事情。 如果用户退出并且他想再次登录。 现在,如果他点击登录按钮,他将再次被重定向到Twitter以授权该应用程序。 无论如何我有可能克服这一点。 我注意到一些网站然后即使我退出并再次点击登录。 它做了一些事情,并没有去推特网站登录我。 我怎么做? 他们把我的令牌和秘密保存在cookies中吗? 例如: http : //www.klout.com

RDiscount:与Sinatra一起生成generate_toc

因此我使用Rdiscount设置sinatra来渲染具有HAML布局的markdown文件。 这一切都有效,但我希望RDiscount根据haml文件中的标题生成目录。 我试过在sinatra配置中设置它。 set :markdown, :generate_toc => true 但这似乎不起作用。 当我像这样渲染降价时,我也尝试过这样做: markdown :PAGENAMEHERE, :layout => :’layouts/PAGENAMEHERE’, :generate_toc => true 这也行不通。 这有可能吗? 如果是的话,我做错了什么?

如何从我的sinatra应用程序中的类传递数据到websocket-rack?

我在sinatra应用程序中有一个websocket-rack的工作配置,用于具有多个屏幕的物理安装。 有一些function可以使消息在websockets中来回传递。 我的问题是这样的:我有一个页面带有标准的Web表单(即不是websocket表单),我的目标是从该表单中收集params,将params转换为字符串变量,然后发送该变量的内容(字符串)通过websocket到不同的页面/屏幕。 对于我的生活,我无法弄清楚如何做一个应该是一个相对简单的任务,因为从我的应用程序中的主类,我无法与我的Socket类进行通信,从我理解的基本上是机架应用。 我试图通过将resque设置为中间人来解决它,但很快发现我的问题没有改变。 我无法弄清楚如何从另一个类调用方法和/或将变量传递给Socket,以便它将推送到浏览器。 基本上,我有一个app.rb是这样的: module SomeThing class App < Sinatra::Base get '/' do #show a form end post '/submit' do #receive params #save params new_message = params.inspect #dream up some way to pass new_message to websocket end post '/otherscreen' do #have an open websocket to receive new_message end end class Socket < […]

在服务器进程中创建工作线程是一个坏主意吗?

我的服务器进程基本上是一个响应REST请求的API。 其中一些请求用于启动长时间运行的任务。 做这样的事情是个坏主意吗? get “/crawl_the_web” do Thread.new do Crawler.new # this will take many many days to complete end end get “/status” do “going well” # this can be run while there are active Crawler threads end 服务器每天不会处理超过1000个请求。

你如何从Sinatra中删除路线?

我有一些动态加载的插件,它们在启动时注册它们的路由,但是我还需要能够在它们被禁用时删除它们的路由。 有没有办法删除现有路线? API没有任何我可以找到的方法来删除它们,我能想到的另一种方法就是直接进入Sinatra :: Base的@routes对象,但我不确定你是否可以做任何事情,如果可以……这样做是否安全?

Sinatra测试总是404′

我有一个非常简单的Sinatra应用程序,我在测试时遇到了问题。 基本上,当我从浏览器中的测试中知道请求正常工作时,每个请求测试都会返回404。 关于问题可能是什么的任何想法? test_helper.rb中: ENV[“RACK_ENV”] = ‘test’ $: << File.expand_path(File.dirname(__FILE__) + '/../lib') require 'app' Sinatra::Synchrony.patch_tests! class Test::Unit::TestCase include Rack::Test::Methods end app_test.rb require ‘test_helper’ class AppTest < Test::Unit::TestCase def app @app ||= Sinatra::Application end def test_it_says_hello get "/" assert_equal 200, last_response.status end end app.rb $: << 'config' require "rubygems" require "bundler" ENV["RACK_ENV"] ||= "development" Bundler.require(:default, ENV["RACK_ENV"].to_sym) […]

数据库连接池

我在Sinatra中创建了一个小聊天应用程序,在heroku上创建了jQuery。 它只是在用户提交消息时将消息插入数据库。 并且还每2秒下载新消息。 经过几分钟的测试后,它停止工作,我收到了一封heroku的电子邮件: 嗨, 我们注意到gisekchat应用程序有大量连接打开共享数据库。 由于性能原因,我们必须限制共享数据库的连接数。 您是否可以减少共享数据库的总连接数或移动到专用数据库? 您似乎没有利用连接池,并且正在为应用程序中的每个请求打开与数据库的新连接。 谢谢,-Chris 这是支持提交消息的动作(接收非常相似): post ‘/send’ do con = con = PGconn.connect($dbhost, 5432, “”,””,$dbname, $dbuser, $dbpass) con.exec(“insert into messages(usr, msg, date) values(‘#{params[:usr]}’,’#{params[:msg]}’, now())”) end 我该如何更改它以启用连接池?