我有一个多语言网站,我把这种语言放在像domain.com/en/这样的网址中.当用户未将该语言放入URL时,我想将其重定向到主要语言的页面,如"domain.com/posts"到"domain.com/en/posts".Sinatra有一个简单的方法吗?
我有一百多条路线.因此,为每条路线做这件事并不是一个很好的选择.
获取"/:locale/posts"do ... end
得到"/帖子"做...结束
有人能帮我吗?
谢谢
我需要使用Sinatra为我的应用程序创建一个基本的用户管理系统,但我不确定如何考虑它.
它需要:
注册用户
登录用户
我该怎么想呢?这应该不难,我只是对这一切都很新.
谢谢.
我正在尝试在Ubuntu 10.10中运行需要Sinatra的Ruby应用程序.我是这些技术中的3种新手,所以我理解这个问题对你来说是否显得愚蠢.
昨天我安装了ruby做......
sudo apt-get install ruby1.9.1-full
和sinatra做...
sudo gem install sinatra
这是我正在尝试运行的代码:
require 'rubygems'
require 'sinatra'
get '/' do
"Hi Alex!"
end
Run Code Online (Sandbox Code Playgroud)
当我ruby1.9.1 -rubygems app.rb没有做任何事情时(Ruby已正确安装,因为我尝试运行不需要sinatra的应用程序,它们工作正常).
$ ls
app.rb
$
$ ruby1.9.1 app.rb
$
$ ruby1.9.1 -rubygems app.rb
$
Run Code Online (Sandbox Code Playgroud)
我知道它应该打开Sinatra并告诉我它正在听哪个端口.
我一直在寻找网上的帮助,并阅读在这个论坛中创建的几个主题,但我尝试过的任何东西都没有为我解决.
这可能发生什么?
谢谢
如何从coffeescript模板中访问ruby实例变量?
在sinatra文档中,它表示模板在与调用该模板的路径相同的范围内进行评估.
所以,我有以下sinatra应用程序:
server.rb:
require "sinatra"
require "coffee-script"
get '/app.js' do
@str = "Hello"
coffee :app
end
Run Code Online (Sandbox Code Playgroud)
在views/app.coffe文件中我想使用@str变量.可能吗?如果是这样,我如何访问@str变量?
我在使用Thin和Sinatra设置我的应用程序时遇到了问题.我创建了一个包含以下设置的development-config.ru文件:
# This is a rack configuration file to fire up the Sinatra application.
# This allows better control and configuration as we are using the modular
# approach here for controlling our application.
#
# Extend the Ruby load path with the root of the API and the lib folder
# so that we can automatically include all our own custom classes. This makes
# the requiring of files a bit cleaner and easier to maintain.
# This is …Run Code Online (Sandbox Code Playgroud) 我上传了一个简单的Sinatra应用程序到AppFog.它在我的本地机器上运行良好.但在将应用程序上传到AppFog后,当我访问AppFog域时,会显示带有"禁止"消息的页面.
这些是appFog日志:
====> /logs/stderr.log <====
...
W, [2012-06-01T06:32:54.008426 #28933] WARN -- : attack prevented by Rack::Protection::IPSpoofing
211.32.146.42 - - [01/Jun/2012 06:32:54] "GET / HTTP/1.1" 403 - 0.0002
10.0.64.157 - - [01/Jun/2012:06:32:54 UTC] "GET / HTTP/1.0" 403 9 - -> /
W, [2012-06-01T06:32:54.393022 #28933] WARN -- : attack prevented by Rack::Protection::IPSpoofing
211.32.146.42 - - [01/Jun/2012 06:32:54] "GET /favicon.ico HTTP/1.1" 403 - 0.0002
10.0.64.157 - - [01/Jun/2012:06:32:54 UTC] "GET /favicon.ico HTTP/1.0" 403 9 - -> /favicon.ico
Run Code Online (Sandbox Code Playgroud)
我没有Rack::Protection::IPSpoofing在我的代码中使用,但我得到了这些错误.Rack::Utils …
我正在重写Sinatra中的一个小型服务器后端,目前客户端通过cURL调用与它进行通信echo "foo" | curl -X PUT -T - http://localhost:8090/.问题是,在我put在Sinatra的方法中request.body.read,即使在我打电话之后rewind,它总是空的.此外,params哈希是完全空的.
奇怪的是,如果我这样做,curl -X PUT -d 'foo' http://localhost:8090/它就会起作用.另外,在node.js中我可以使用request.on('data')和request.on('end')函数读取它.
有没有办法PUT在Sinatra 阅读身体?如果可能的话,我想避免更改客户端代码.
我正在使用Sinatra,但我猜这也适用于Rails(如果没有,请删除标签或让我知道,我将删除它).
我有一个ActiveRecord :: Base类User.它有很多属性,我正在显示一个允许某人更新特定用户的页面.问题是,我很难以干燥的方式实现更新功能.我的意思是,当我收到paramsPOST请求时,我可以这样做:
a_user.update_attributes params
Run Code Online (Sandbox Code Playgroud)
因为params也含有其他垃圾(比如:splat- 那是什么?),它会抛出一个未知的属性错误.我需要做的是:
a_user.update_attributes {:attrA => params[:attrA],
:attrB => params[:attrB], ...etc }
Run Code Online (Sandbox Code Playgroud)
(请记住,有很多属性)
这是我应该怎么做的?对我来说,出于某种原因......感觉不对.例如,如果我有另一个需要以类似方式更新的模型,我必须再次手动重写所有属性.
我正在寻找的是一些像:
a_user.filter_and_update_attributes params
Run Code Online (Sandbox Code Playgroud)
其中filter_and_update_attributes自动过滤任何坏/未知属性的参数,我可以在任何模型的任何地方使用它,必须重写这么多无用的代码.
谢谢
我可能在这里遗漏了一些非常明显的东西,但我似乎无法找到答案,或者自己解决这个问题.在Sinatra中,他们有一个self.get捕获块的方法,当一个块被调用时,你可以在request里面使用变量,这怎么可能?
module Sinatra
class Base
class Request < Rack::Request
end
attr_accessor :request
def call!(env)
@request = Request.new(env)
end
class << self
def get(path, opts = {}, &block)
...
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
class App < Sinatra::Base
get '/' do
puts request
end
end
Run Code Online (Sandbox Code Playgroud)