我是这三个人的新手,我正在尝试为网站写一个简单的联系表格.我提出的代码如下,但我知道它存在一些基本问题(由于我对sinatra缺乏经验).得到这个工作的任何帮助将不胜感激,我似乎无法弄清楚/找到这类事情的文档.
来自联系页面的haml代码:
%form{:name => "email", :id => "email", :action => "/contact", :method => "post", :enctype => "text/plain"}
%fieldset
%ol
%li
%label{:for => "message[name]"} Name:
%input{:type => "text", :name => "message[name]", :class => "text"}
%li
%label{:for => "message[mail]"} Mail:
%input{:type => "text", :name => "message[mail]", :class => "text"}
%li
%label{:for => "message[body]"} Message:
%textarea{:name => "message[body]"}
%input{:type => "submit", :value => "Send", :class => "button"}
Run Code Online (Sandbox Code Playgroud)
这是我在sinatra的app.rb中的代码:
require 'rubygems'
require 'sinatra'
require 'haml'
require 'pony'
get '/' do
haml :index
end
get …Run Code Online (Sandbox Code Playgroud) 我在Windows 7 32位操作系统上有一个ruby(使用sinatra)webservice.它在端口4567上运行.当我使用localhost时工作正常:4567但是当我用我的机器的本地ip替换localhost时,192.168.103.99 :4567它不起作用,并且无法连接.我已经禁用了防火墙,旁路代理并将端口4567添加到异常,仍然没有运气.
可能是什么问题?
我一直在我的本地Windows机器上试用Sinatra.我想要包含一些本地CSS和JS文件.这是代码在layout.erb中的样子
<script src="jquery.js" type="text/javascript">
</script>
<link rel="stylesheet" href="reset.css" type="text/css" />
Run Code Online (Sandbox Code Playgroud)
我的所有文件都与app.rb位于同一个文件夹中
这是我的app.rb
require 'rubygems'
require 'sinatra'
get '/' do
erb :index
end
Run Code Online (Sandbox Code Playgroud)
出于某种原因,我无法看到这些文件包含在我的页面中.当我查看源代码并单击文件(JS/CSS)时,我看到 - "Sinatra不知道这个小曲" - 错误.
我在这做错了什么?
在Sinatra中,我无法创建在应用程序生命周期中仅赋值一次的全局变量.我错过了什么吗?我的简化代码如下所示:
require 'rubygems' if RUBY_VERSION < "1.9"
require 'sinatra/base'
class WebApp < Sinatra::Base
@a = 1
before do
@b = 2
end
get '/' do
puts @a, @b
"#{@a}, #{@b}"
end
end
WebApp.run!
Run Code Online (Sandbox Code Playgroud)
这导致了
nil
2
Run Code Online (Sandbox Code Playgroud)
在终端和,2浏览器中.
如果我尝试@a = 1输入initialize方法,我会收到错误WebApp.run!.
我觉得我错过了一些东西,因为如果我不能拥有全局变量,那么如何在应用程序实例化期间加载大数据呢?
before do 似乎每次有来自客户端的请求时都会调用它.
我对Sinatra(红宝石框架)感到困惑.
它是一个轻量级的Rails替代品还是你可以让它们并排运行?
你可以做一个Web应用程序(如在Rails中)吗?比如一个twitter克隆?
我正在尝试在我的Sinatra应用程序中获取域名,但作为一个新手我真的很难弄清楚如何做到这一点,我知道它一定是可能的!
Rack::Request#host_with_port 看起来很有前途,但我不知道如何从我的应用程序中获取 - 我如何从我的Ruby代码中获取Rack的东西?
或者还有另一种方式 - 我想我每次发生请求时都不想这样做(虽然它不是太糟糕),但我认为如果我能在应用程序中执行一次会更好加载.
任何提示?
我们可以写
get '/foo' do
...
end
Run Code Online (Sandbox Code Playgroud)
和
post '/foo' do
...
end
Run Code Online (Sandbox Code Playgroud)
这很好.但是我可以在一个路由中组合多个HTTP动词吗?
我在我的sinatra应用程序中执行了以下操作:
disable :show_exceptions
disable :raise_errors
error do
haml :error, :locals => {:error_message => request.env['sinatra.error'].to_s}
end
get '/error' do
raise "ERROR!!"
end
Run Code Online (Sandbox Code Playgroud)
如果我访问/error我得到一个500 - Internal Server Error响应代码,这是上帝和想要的.但是如何将代码更改为404或501?
答案:
disable :show_exceptions
disable :raise_errors
get '/error' do
halt(404,haml(:error, :locals => {:error_message => request.env['sinatra.error'].to_s}))
end
Run Code Online (Sandbox Code Playgroud) 我有一个与Sinatra一起编写的小型Web服务器.我希望能够将消息记录到日志文件中.我通过http://www.sinatrarb.com/api/index.html和www.sinatrarb.com/intro.html 阅读,我看到Rack有一个名为Rack :: CommonLogger的东西,但我找不到如何访问和用于记录消息的任何示例.我的应用程序很简单所以我把它写成顶级DSL,但我可以切换到从SinatraBase继承它,如果这是所需要的一部分.
我觉得我在这里遗漏了一些明显的东西,我希望我发布这个时候有人会因为我失踪的谷歌搜索链接而感到羞耻:-)
enable :sessions
get '/logout' do
# What goes here to kill the session?
end
Run Code Online (Sandbox Code Playgroud) sinatra ×10
ruby ×9
rack ×2
domain-name ×1
haml ×1
logging ×1
pony ×1
session ×1
web-services ×1
webrick ×1