标签: sinatra

在sinatra获得绝对(基础)网址

现在,我做了

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可用,或者看起来如此.因此将它放入包含中并不起作用.

你如何得到你的基本网址?

ruby haml sinatra

18
推荐指数
2
解决办法
2万
查看次数

使用Bundler从Github安装gem

我正在尝试使用这里说明来安装带有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(和依赖项)列为现有的,但我无法正确解析它们.

谢谢.

ruby rubygems sinatra bundler

18
推荐指数
2
解决办法
8207
查看次数

如何在sinatra视图中渲染部分(haml中的haml)?

我有一个简单的sinatra应用程序,使用haml和sass的视图.其中一个视图(位于视图文件夹中)是我的导航菜单的一部分.我试图从index.haml渲染它,但我得到以下错误:错误的参数数量(1为2)

我试图用index.haml中的以下行来渲染它

.navigation
  = render :partial => "nav"
Run Code Online (Sandbox Code Playgroud)

ruby haml view sinatra

18
推荐指数
4
解决办法
2万
查看次数

开源mini-heroku?

我开始玩Sinatra并在Heroku上部署,我发现它非常有趣.我不需要Heroku提供的可扩展性,但我非常喜欢他们的CLI以及通过简单推送部署应用程序的能力.是否有在释放,我会一巴掌说,在一个EC2实例,并且将提供相同的服务(Web服务器,Postgres的,混帐推到部署,维护模式...)VM映像"的一个开源项目小'​​?

git rack heroku sinatra

18
推荐指数
2
解决办法
6555
查看次数

Sinatra动态配置环境

我成功编写了一个小的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)

ruby heroku sinatra

18
推荐指数
2
解决办法
3万
查看次数

Rails,Padrino和Sinatra适用于构建预付费移动服务

我正在开发Mobile/VOIP域中的应用程序.这对我来说真的是个灰色地带.以下是有关该应用程序的一些细节:

  • 这基本上就像是自动充值/预付费移动服务
  • 与我之前编写的以前的ERP应用程序相比,它具有中等复杂度的逻辑.
  • 响应中的视图部分将是纯文本,将作为SMS/USSD拉到用户和语音XML(VXML)发送,将作为IVR响应发送给用户.
  • 路由逻辑非常简单,因为对于每种类型的回复,只有两到三个URL很重要.

约束:

我们拥有内置于Perl的核心系统(它是一个为许多其他VOIP /移动相关服务提供服务的遗留系统),以及一个跟踪盈利和亏损的会计系统,但它已经变得非常复杂.因此我们决定单独制作此应用程序,并仅使用SMS/USSD和IVR.但是,该应用程序的每个用户必须是核心系统的注册用户才能进行会计处理; 这可以通过API调用轻松实现.

现在,为了发送IVR和USSD的回复/响应,我们需要在提供这些功能的供应商处部署应用程序.但我们不希望总是需要登录到他们的服务器以获取日常报告和会计资料,因为对于我们的每个客户,我们将为USSD/SMS/IVR系统提供不同的流程.

因此,我们决定将这个新应用程序分成两个子应用程序.

  • 一个应用程序将处理带有USSD/SMS/IVR域的USER接口,并将部署在供应商的服务器上,我们称之为"clientware".
  • 第二个应用程序将处理所有核心业务逻辑和报告系统,并将部署在我们的服务器上,我们将拥有完全访问权限.我们称之为"中间件".

应用程序的基本流程:

  1. 用户拨打短代码.
  2. 在我们的供应商服务器上调用land,其中clientware app将处理请求并将其作为用户注册在其本地数据库中.
  3. Clientware还会对中间件进行API调用.在那里注册该用户以及核心业务逻辑及时自动充值等.
  4. 然后,中间件还将对核心系统进行API调用,以便在那里注册该用户以用于会计目的.

现在,将有许多此类客户端应用程序与单个中间件应用程序交互.我们决定用Ruby构建这些应用程序.我将遵循RESTful架构,因为涉及到许多API调用.

在这三个框架中,Rails,PadrinoSinatra是否特别适合这个项目?如果可能的话,我将很感激比较详细的相关利弊.

ruby comparison ruby-on-rails sinatra padrino

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

自动记录DataMapper查询

我正在使用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本地运行应用程序.

我错过了什么?

ruby datamapper sinatra

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

使用机架安装的多个Sinatra应用程序

我有一个关于在Sinatra上使用机架安装的问题.我有两个经典风格的Sinatra应用程序.让我们调用app.rb中定义的一个App和api.rb中定义的另一个API.

我希望它能让api.rb处理所有以'/ api'开头的路由,而app.rb会处理所有其他请求,包括root('/').

如何使用机架安装进行设置?或者有更好的解决方案吗?

ruby sinatra

17
推荐指数
3
解决办法
1万
查看次数

如何保护REST服务的"公共"部分免受垃圾邮件侵害?

我有一个相当完整的REST服务,将与iOS应用程序一起使用.它是使用Ruby/Sinatra构建的,但我认为这并不重要.

我正在使用基于SSL的HTTP基本身份验证来处理各种端点,而且这部分工作得非常好.

问题是:如何阻止垃圾邮件发送者等调用未通过HTTP基本身份验证保护的REST服务部分?

示例:用户注册

我们假设REST调用是(POST) .../register_account传递正文中的JSON对象.

出于显而易见的原因,此调用不能指望链接到用户帐户的用户名/密码.

想法是:

1)应用程序有自己的"用户名"/密码,有些调用会检查应用程序凭据.问题:植入设备等可以挖掘出这些凭据.

2)应用程序通过HTTP标头将秘密令牌传递给REST服务以进行这些调用.问题:与(1)相同

是否有任何常用的技术来阻止此类垃圾邮件呼叫?我想也许可以在混合中引入iPhone的设备ID,但还没有找到明确的方法.

谢谢

security authentication rest sinatra

17
推荐指数
2
解决办法
5619
查看次数

sinatra config.ru:配置块是什么?

我正在使用带有"经典"风格的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)

ruby configuration passenger sinatra

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