现在,我做了
get '/' do
set :base_url, "#{request.env['rack.url_scheme']}://#{request.env['HTTP_HOST']}"
# ...
haml :index
end
Run Code Online (Sandbox Code Playgroud)
能够在HAML index.haml中使用options.base_url.但我确信有更好的,干的,这样做的方式.然而,我看不到,也找不到它.(我是Sinatra的新手:))
不知何故,在get之外,我没有request.env可用,或者看起来如此.因此将它放入包含中并不起作用.
你如何得到你的基本网址?
我正在尝试使用这里的说明来安装带有bundler的预发布版本的gem.
"bundle install"输出将gem列为已安装,但"gem list"无法找到它.
我的Gemfile:
source :gemcutter
gem 'sinatra', '1.1.0', :git => 'http://github.com/sinatra/sinatra.git'
gem 'RedCloth', '4.2.3'
Run Code Online (Sandbox Code Playgroud)
这是我的示例代码的其余部分的要点.
有没有人让这个场景奏效?
注意:我也在使用RVM(在OS X上).bundle show会将gem(和依赖项)列为现有的,但我无法正确解析它们.
谢谢.
我有一个简单的sinatra应用程序,使用haml和sass的视图.其中一个视图(位于视图文件夹中)是我的导航菜单的一部分.我试图从index.haml渲染它,但我得到以下错误:错误的参数数量(1为2)
我试图用index.haml中的以下行来渲染它
.navigation
= render :partial => "nav"
Run Code Online (Sandbox Code Playgroud) 我开始玩Sinatra并在Heroku上部署,我发现它非常有趣.我不需要Heroku提供的可扩展性,但我非常喜欢他们的CLI以及通过简单推送部署应用程序的能力.是否有在释放,我会一巴掌说,在一个EC2实例,并且将提供相同的服务(Web服务器,Postgres的,混帐推到部署,维护模式...)VM映像"的一个开源项目小'?
我成功编写了一个小的Sinatra应用程序,并已成功部署在heroku上.
但是,我想在我的本地计算机上以开发模式运行该应用程序,并且我希望在将它推送到远程存储库后在heroku上具有生产模式.
目前我可以实现其中一个选项.当我将config.ru更改为以下值时:
require 'rubygems'
require 'sinatra'
require 'sinatra/reloader'
require "./calc.rb"
enable :logging
set :environment, :development
set :port, 4567
Run Code Online (Sandbox Code Playgroud)
我可以通过本地(在端口4567上)运行它ruby config.ru.当我将config.ru更改为:
require 'rubygems'
require 'sinatra'
require 'sinatra/reloader'
require "./calc.rb"
enable :logging
set :environment, :production
set :port, 4567
run Sinatra::Application
Run Code Online (Sandbox Code Playgroud)
我能够让它在Heroku上运行(在端口80上).
但我不能在开发和生产中使用相同的配置.
我希望有类似的东西:
ruby config.ru dev用于开发和ruby config.ru生产.
附加信息:
当我尝试在我的本地机器上运行生产config.ru时,我得到:
$ ruby config.ru
(eval):2:in `method_missing': undefined method `run' for main:Object (NoMethodError)
from (eval):4:in `__send__'
from (eval):4:in `method_missing'
from config.ru:10
Run Code Online (Sandbox Code Playgroud) 我正在开发Mobile/VOIP域中的应用程序.这对我来说真的是个灰色地带.以下是有关该应用程序的一些细节:
我们拥有内置于Perl的核心系统(它是一个为许多其他VOIP /移动相关服务提供服务的遗留系统),以及一个跟踪盈利和亏损的会计系统,但它已经变得非常复杂.因此我们决定单独制作此应用程序,并仅使用SMS/USSD和IVR.但是,该应用程序的每个用户必须是核心系统的注册用户才能进行会计处理; 这可以通过API调用轻松实现.
现在,为了发送IVR和USSD的回复/响应,我们需要在提供这些功能的供应商处部署应用程序.但我们不希望总是需要登录到他们的服务器以获取日常报告和会计资料,因为对于我们的每个客户,我们将为USSD/SMS/IVR系统提供不同的流程.
因此,我们决定将这个新应用程序分成两个子应用程序.
现在,将有许多此类客户端应用程序与单个中间件应用程序交互.我们决定用Ruby构建这些应用程序.我将遵循RESTful架构,因为涉及到许多API调用.
在这三个框架中,Rails,Padrino或Sinatra是否特别适合这个项目?如果可能的话,我将很感激比较详细的相关利弊.
我正在使用DataMapper在Sinatra上创建一个简单的应用程序.我希望看到为我的各种链式查找器创建DM的查询等.
我试过了:
DataMapper::Logger.new(STDOUT, :debug)
Run Code Online (Sandbox Code Playgroud)
在我的configure do ... end块中environment.rb,在应用程序启动时加载的文件中.
我也尝试过:
DataMapper::Logger.new('log/my-app.log', :debug)
Run Code Online (Sandbox Code Playgroud)
无论是通过浏览器还是通过irb需要我的应用程序的会话,都可以从应用程序中获取日志语句.我看到应用程序启动消息.
我正在使用rackup config.ru本地运行应用程序.
我错过了什么?
我有一个关于在Sinatra上使用机架安装的问题.我有两个经典风格的Sinatra应用程序.让我们调用app.rb中定义的一个App和api.rb中定义的另一个API.
我希望它能让api.rb处理所有以'/ api'开头的路由,而app.rb会处理所有其他请求,包括root('/').
如何使用机架安装进行设置?或者有更好的解决方案吗?
我有一个相当完整的REST服务,将与iOS应用程序一起使用.它是使用Ruby/Sinatra构建的,但我认为这并不重要.
我正在使用基于SSL的HTTP基本身份验证来处理各种端点,而且这部分工作得非常好.
问题是:如何阻止垃圾邮件发送者等调用未通过HTTP基本身份验证保护的REST服务部分?
示例:用户注册
我们假设REST调用是(POST) .../register_account传递正文中的JSON对象.
出于显而易见的原因,此调用不能指望链接到用户帐户的用户名/密码.
想法是:
1)应用程序有自己的"用户名"/密码,有些调用会检查应用程序凭据.问题:植入设备等可以挖掘出这些凭据.
2)应用程序通过HTTP标头将秘密令牌传递给REST服务以进行这些调用.问题:与(1)相同
是否有任何常用的技术来阻止此类垃圾邮件呼叫?我想也许可以在混合中引入iPhone的设备ID,但还没有找到明确的方法.
谢谢
我正在使用带有"经典"风格的Apache和Phusion-Passenger的Sinatra:
# config.ru
require 'sinatra'
configure do
....
end
require './app'
run Sinatra::Application
Run Code Online (Sandbox Code Playgroud)
我想定义一些东西.在配置块内部或外部定义它有什么区别?
# config.ru
require 'sinatra'
# A) Defining logger here
rack = File.new("logs/rack.log", "a+")
use Rack::CommonLogger, rack
# B) Global variables here
LOGGER = Logger.new(...)
# C) Gem configuration here
DataMapper::Property::Boolean.allow_nil(false)
configure do
# A) Or defining logger here?
rack = File.new("logs/rack.log", "a+")
use Rack::CommonLogger, rack
# B) Or global variables here?
LOGGER = Logger.new(...)
# C) Or gem configuration here?
DataMapper::Property::Boolean.allow_nil(false)
....
end
require './app'
run …Run Code Online (Sandbox Code Playgroud)