标签: sinatra

Rack :: ResponseHeaders在Sinatra的机架中

我认为这是一个非常简单的问题,但我似乎无法做到这一点.基本上,我正在尝试使用Rack中间件将默认的Cache-Control标头设置为我的Sinatra应用程序提供的所有响应.它看起来像机架:: responseHeaders响应应该能够做的正是我需要的,但我得到尝试使用证明的语法时出现错误在这里我rackup文件:

use Rack::ResponseHeaders do |headers|
    headers['X-Foo'] = 'bar'
    headers.delete('X-Baz')
end
Run Code Online (Sandbox Code Playgroud)

我能够让Rack :: Cache成功运行如下:

use Rack::Cache,
    :default_ttl => 3600
Run Code Online (Sandbox Code Playgroud)

但是,这并没有达到我想要的输出,而Rack :: ResponseHeaders提供了对标题的细粒度控制.

仅供参考,我的网站托管在Heroku上,所需的Rack gems在我的.gems清单中指定.

谢谢!

更新:经过一些研究,看起来第一个问题是在安装的rack-contrib(0.9.2)版本中找不到Rack :: ResponseHeaders.我将从调查开始.

rack heroku sinatra

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

Sinatra和Bundler

我正在尝试安装Bundler,这样我就可以将我的Sinatra应用程序部署到具有所有正确宝石的服务器上.

我已经创建了我的Gemfile

source :gemcutter
gem 'sinatra', '1.0'
gem "nokogiri", "1.4.2"
gem "rack",  "1.1.0"
gem "dm-core",  "1.0.0"
gem "dm-migrations",  "1.0.0"
gem "dm-sqlite-adapter",  "1.0.0"
gem "pony", "1.0"
Run Code Online (Sandbox Code Playgroud)

接下来我创建了一个Config.ru

require 'rubygems'
require 'bundler'
Bundler.setup

require 'sinatra'
require 'dm-core'
require 'dm-migrations'
require 'dm-sqlite-adapter'
require 'open-uri'
require 'nokogiri'
require 'csv'
require 'pony'
require 'parsedate'
require 'digest/md5'

require 'MyApp'
run MyApp
Run Code Online (Sandbox Code Playgroud)

到目前为止一直很好,所以接下来我跑了bundle install并且得到了'Bundle Complete'所以现在我需要做的只是Rackup

然后我得到:

config.ru:18: undefined local variable or method `MyApp' for #<Rack::Builder:0x1227350 @ins=[]> (NameError)
from /usr/local/lib/ruby/gems/1.8/gems/rack-1.1.0/lib/rack/builder.rb:46:in `instance_eval'
from /usr/local/lib/ruby/gems/1.8/gems/rack-1.1.0/lib/rack/builder.rb:46:in `initialize'
from …
Run Code Online (Sandbox Code Playgroud)

ruby rack rubygems sinatra bundler

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

启动sinatra服务器无法工作的gem可执行文件

所以我用sinatra写了一个简单的"Hello World"网站:

#!/usr/bin/env ruby

# sinatra_demo/bin/sinatra_demo

require 'rubygems'
require 'sinatra'

get "/hello" do
  "Hello World!"
end
Run Code Online (Sandbox Code Playgroud)

当我运行它,它可以工作,我可以将我的浏览器发送到http:// localhost:4567/hello并获得"Hello World":

% sinatra_demo/bin/sinatra_demo
== Sinatra/1.2.6 has taken the stage on 4567 for development with backup from WEBrick
[2011-06-30 09:29:58] INFO  WEBrick 1.3.1
[2011-06-30 09:29:58] INFO  ruby 1.9.2 (2011-02-18) [x86_64-darwin10.7.4]
[2011-06-30 09:29:58] INFO  WEBrick::HTTPServer#start: pid=73620 port=4567
127.0.0.1 - - [30/Jun/2011 09:30:10] "GET /hello HTTP/1.1" 200 12 0.0027
localhost - - [30/Jun/2011:09:30:10 EDT] "GET /hello HTTP/1.1" 200 12
- -> /hello
127.0.0.1 …
Run Code Online (Sandbox Code Playgroud)

ruby rubygems sinatra

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

对于一个主要是静态页面和一些表单的网站,Rails是否足够轻松?

我正在寻找一种更简单的方法来创建一个小型个人网站,而不是使用Ruby on Rails(我会说我有'中级'经验).该网站将主要是从块(文章,菜单等)构建的静态页面,我希望能够使用像Markdown这样的东西来创作,以便非技术人员可以撰写文章.该网站还需要一些简单的反馈型表格.我可能不需要大量的测试.

该网站的外观非常简洁,我希望完全控制外观.我对Rails,Ruby,Javascript,HTML和CSS感到满意.

我想知道的是,我是否会通过使用Rails进行维护(包括部署)和为网站创作内容的复杂程度.我听过一些关于Sinatra的事情,引起了我的兴趣,但从未使用它 - 这会减少维护费用吗?

如果站点要求用户登录,建议是否会更改?

html ruby-on-rails sinatra

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

在文件系统中存储图像会破坏文件.有没有更好的方法来写这个?为什么我会破坏文件?

post '/upload' do
  unless params[:file] && (tmpfile = params[:file][:tempfile]) && (name = params[:file][:filename])
    return haml(:upload)
  end
  time = Time.now.to_s
  time.gsub!(/\s/, '')
  name = time + name
  while blk = tmpfile.read(65536)
    File.open(File.join(Dir.pwd,"public/uploads", name), "wb") { |f| f.write(tmpfile.read) }
  end
  'success'
end
Run Code Online (Sandbox Code Playgroud)

一切都在预期文件最终被破坏的地方.

ruby post file-upload image sinatra

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

在Heroku上部署Sinatra应用程序

关于在Heroku上部署Sinatra应用程序,我感到很困惑的事实上并不是一个实际问题 - 只是一个概念上的难题.

我有两个应用程序,几乎在每个方面都相同,只是一个将大部分逻辑放在一个不包含Sinatra :: Base类的文件中,并使用'require otherfilename'来获取它需要的逻辑.Sinatra:Base类名为Kincalc.

对于包含一个文件中所有逻辑的应用程序(即包含Sinatra:Base类的同一文件),在我的config.ru文件中,最后一行显示"运行Sinatra :: Application",它启动正常.但在另一个应用程序中,如果我将其作为最后一行包含,则应用程序正确上传并说它"已部署到Heroku"但它会显示"未找到"消息.当我有最后一行读'run Kincalc'时,它加载正常.

我已经来回检查了这两个应用程序是如何构建的,除了一个人使用第二个文件作为逻辑(也是在root用户)的事实.为什么这是一个问题,还是这真的是问题?当我尝试将第二个文件(没有Sinatra类的文件)放在一个单独的lib文件夹中时,它在我调用类名时仍然有效,但在我调用"Sinatra :: Application"时却不行.

configuration sinatra rackup

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

"记住我"选项 - 我该如何实现它?

我的Sinatra应用程序中有一个简单的身份验证系统.session[:user_id]当用户输入正确的登录名和密码时,它基本上设置为用户的id.这已经足够了,我不会使用其他解决方案.

我需要做的是做出"记住我"的选择.那么我怎样才能为我的简单解决方案做到这一点?我无法弄清楚.

ruby authentication sinatra

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

使用Sinatra和jQuery而无需在POST上重定向

我正在尝试使用jQuery向我的Sinatra应用程序提交表单,但是当通过AJAX进行POST时,Sinatra应用程序正在显示一个空白页面.我希望它保持在同一页面,并更新我在javascript中指定的内容.这是我的代码,剥离了:

post '/register' do
  register( params )
end
get '/register' do
  haml :register
end
Run Code Online (Sandbox Code Playgroud)

这是我在haml文件中的javascript:

:javascript
        $(function() {
                $("button#submit").click(function(){
                        $.ajax({
                                type: "POST",
                                url: "/register",
                                data: $('form.register').serialize(),
                                success: function(){
                                        $("#message").html("Successfully registered")
                                },
                                error: function(){
                                        $("#message").html("Not Successful")
                                }
                        });
                });
        });
Run Code Online (Sandbox Code Playgroud)

ruby jquery sinatra

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

如何以rspec方式改进此RSpec代码?

我是Ruby和RSpec的新手.我来自Java背景,这就是为什么我的测试真的看起来像junit代码.我想更多地了解RSpec的,但我不太明白subject,let,!let.所以,如果有人可以指导我清理这些代码,我将非常感激.

我有Sinatra,RSpec正在用Twitter登录.

get '/login/twitter' do
  begin
    request_token = TwitterService.new.authentication_request_token

    session[:request_token_twitter] = request_token

    redirect request_token.authorize_url
  rescue Exception => e
    logger.error(e.message)
    redirect '/'
  end  
end

get '/login/twitter/success' do
  request_token = session[:request_token_twitter]
  twitter_service = TwitterService.new
  access_token = twitter_service.authorize(request_token, params[:oauth_verifier])

  begin
    twitter_user_info = twitter_service.verify_credentials

    twitter_id = twitter_user_info["id"]
    response.set_cookie("auth_token", :value => twitter_id, :path => '/')
    response.set_cookie(@social_flag, :value => "t", :path => '/')

    expected_user = @user_manager.find_by_id(twitter_id.to_s)

    if expected_user.is_null?
      twitter_user = User.new(twitter_id, access_token.token, access_token.secret, "t")
      twitter_user.save

      logger.info("Saving ...")
      logger.info("Twitter ID #{twitter_id}") …
Run Code Online (Sandbox Code Playgroud)

ruby testing rspec sinatra rspec2

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

获取目录中每个文件的相对路径

如何获取某个目录中每个文件的相对路径?如果我使用Dir["path/to/folder/*"]它输出整个路径.

ruby sinatra

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