标签: padrino

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
查看次数

Ruby本地化:i18n,g18n,gettext,padrino ...... - 有什么区别?

对于Ruby来说有些新东西我正在探索现有的库来执行我通常在其他脚本语言中所做的事情,而且我对可能用于构建在Sinatra/Sequel(Rails之上)的东西的本地化库感到有点困惑/ AR根据我的口味有点过于自以为是.

现在,我通过这个wiki页面遇到了一对(i18n,r18n,GetText),显然在Padrino中使用了一个额外的库(基于来自Rails的i18n的东西?); 而且显然还有更多.

除了显而易见的(即GetText mo/po样式与yml文件)之外,我对这些选项如何不同感到困惑.除了说它们存在之外,维基在这方面并没有太多指出; 不是他们如何不同.

更令人困惑的是,基本上每一篇文档似乎都涵盖了其中的一篇(通常在RoR上下文中).而且,这些选项在仔细检查时看起来并不完全不相容 - 从某种意义上说,如果我理解这一点,他们可以在很大程度上理解彼此的文件.

这里的任何人都可以对这些库进行快速和简要的解释/概述,并概述它们之间的区别吗?关于性能的一些指示也是受欢迎的,如果你知道任何(除了来自fast_gettext文档的那些,考虑到我对这些选项之间的差异缺乏理解,这没什么意义).

ruby localization internationalization sinatra padrino

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

黑客rails.vim与Padrino合作

我最近克隆了rails.vim(vim-rails)希望修改它以使用Padrino项目.

目前我正在尝试让Rcontroller命令不仅可以查看应用程序/控制器(适用于rails),还可以查看项目中具有名为"controllers"的子文件夹的任何文件夹.所以,当我在命令模式下键入Rcontroller,打标签,我应该能够通过标签admin/controllers/base.rb,admin/controllers/accounts.rb,app/controllers/events.rb等,这将让该插件的用户跳转到控制器的一个Padrino应用的"subapp".例如PADRINO_ROOT/admin

当前controllerList函数似乎处理这个自动完成,这是我到目前为止(仅从原始源稍微修改)

function! s:controllerList(A,L,P)
  let con = padrino#app().relglob("*/controllers/","**/*",".rb") 
  call map(con,'s:sub(v:val,"_controller$","")')
  return s:autocamelize(con,a:A)  
endfunction
Run Code Online (Sandbox Code Playgroud)

我在控制器目录之前添加了通配符,但这给出了结果

  • Rcontroller ers/base
  • Rcontroller ers/sessions
  • Rcontroller s/events

对于最后一个,看起来有些奇怪的事情发生在字符串长度或重叠...

理想情况下,我想让它达到键入Rcontroller admin<TAB>应该导致自动完成的程度Rcontroller admin/controllers/accounts.rb.同样,Rcontroller app<TAB>应该导致Rcontroller app/controllers/events.rb

viewList函数的代码与此类似,其代码如下:

 function! s:viewList(A,L,P)
   let c = s:controller(1)
   let top = padrino#app().relglob("app/views/",s:fuzzyglob(a:A))
   call filter(top,'v:val !~# "\\~$"')
   if c != '' && a:A !~ '/'
     let local = padrino#app().relglob("app/views/".c."/","*.*[^~]")
     return s:completion_filter(local+top,a:A)
   endif
   return s:completion_filter(top,a:A)
 endfunction …
Run Code Online (Sandbox Code Playgroud)

ruby vim padrino

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

如何使用rspec在sinatra中测试重定向?

我试图在我的sinatra应用程序(更具体地说,一个padrino应用程序)的主页上测试重定向,在rspec中.我发现redirect_to,但它似乎只在rspec-rails中.你如何在sinatra中测试它?

所以基本上,我喜欢这样的东西:

  it "Homepage should redirect to locations#index" do
    get "/"
    last_response.should be_redirect   # This works, but I want it to be more specific
    # last_response.should redirect_to('/locations') # Only works for rspec-rails
  end
Run Code Online (Sandbox Code Playgroud)

ruby rspec sinatra padrino

15
推荐指数
2
解决办法
5838
查看次数

sinatra路线中的几个可选参数

我需要Sinatra路由以下列方式运行:

GET /list/20/10  # Get 20 items with offset 10
GET /list/20     # Get 20 items with default offset
GET /list        # Get default number of items with default offset
Run Code Online (Sandbox Code Playgroud)

我明白,我可能会将值作为查询传递:

GET /list?limit=20&offset=10
Run Code Online (Sandbox Code Playgroud)

但我想按照上面的描述传递它们.我很确定有一种方法可以向Sinatra/Padrino解释我想做什么,但我现在完全陷入困境.我试过了:

get :list, :map => '/list', :with => [:limit, :offset] {} # 404 on /list
get :list, :map => '/list/*' { puts params[:splat] } # 404 on /list
get :list, :map => '/list/?:limit?/?:offset?' {} # 404 on /list
get :list, :map => '/list' { redirect url_for(:list, …) …
Run Code Online (Sandbox Code Playgroud)

ruby sinatra padrino

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

如何在Amazon Linux系统中升级ruby版本?

我使用padrino ruby​​框架开发了ruby应用程序.我想在亚马逊上部署它.

我用过这张图片.Amazon Linux AMI 2017.09.1(HVM),SSD卷类型

图像描述是:

"Amazon Linux AMI是由EBS支持的AWS支持的映像.默认映像包括AWS命令行工具,Python,Ruby,Perl和Java.这些存储库包括Docker,PHP,MySQL,PostgreSQL和其他软件包."

启动实例后,我测试了ruby版本,ruby 2.0.0p648 (2015-12-16) [x86_64-linux]但是我需要ruby2.4来部署padrino框架.我试图更新ruby版本一整天都没有成功.console说当前版本是最新版本而且没有ruby2.4如何解决这个问题?(我将gem版本更新为2.7.2)

ruby amazon-web-services padrino

8
推荐指数
2
解决办法
6004
查看次数

用于不同Padrino haml助手的用例

我阅读http://www.padrinorb.com/guides/application-helpers但我不清楚每个视图助手的用例是什么.具体来说,content_for/yield_content, render/partial, capture_html, and concat_content所有人如何融合在一起?

现在,我一直在使用render 'my/view'我的控制器和一些投掷=partial 'my/partial''my/view'刚掰开主模板文件成小块.

是正确的方法吗?何时/何地我想使用其他辅助函数?

ruby haml view padrino

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

将 websocket 连接存储到 redis

我正在使用websocket-rack来构建一个聊天应用程序 API。

我想将 websocket 连接(最终成为 的一个实例Rack::WebSocket::Handler::Base::Connection)存储在 redis 中,以便它们可以被其他进程过滤和引用。

我意识到我可以将连接存储在一个类变量中,但这在跨进程中不起作用。

对象本身显然不能存储在 redis 中,但是websocket_key当我想向它发送消息时,我可以存储和其他一些信息并以某种方式重建连接对象吗?

ruby sinatra websocket redis padrino

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

ActiveRecord在Ruby 1.9.2-rc1下以ASCII-8Bit返回数据

除了标题之外,当从ActiveRecord加载数据时,尽管我尽最大努力强制编码,但编码始终设置为ASCII-8Bit.我已经在这里输入了尽可能详细的信息,试图建立一个可以用来帮助我的好错误报告!

该项目使用以下技术:

  • Padrino框架
  • Ruby 1.9.2-rc2(同样是1.9.1和1.9.2-preview3)
  • ActiveRecord的
  • MySQL的

(完整名单)

$ bundle show | ack '(record|padrino)'
  * activerecord (2.3.8)
  * padrino (0.9.14)
  * padrino-admin (0.9.14)
  * padrino-core (0.9.14)
  * padrino-gen (0.9.14)
  * padrino-helpers (0.9.14)
  * padrino-mailer (0.9.14)
Run Code Online (Sandbox Code Playgroud)

剧集表:

mysql> DESCRIBE `episodes`;
+----------------+--------------+------+-----+---------+----------------+
| Field          | Type         | Null | Key | Default | Extra          |
+----------------+--------------+------+-----+---------+----------------+
| id             | int(11)      | NO   | PRI | NULL    | auto_increment |
| show_id        | int(11)      | YES  |     | NULL    |                |
| season_id …
Run Code Online (Sandbox Code Playgroud)

ruby mysql encoding activerecord padrino

5
推荐指数
2
解决办法
2103
查看次数

使用Nokogiri在Slate/Middleman中生成静态标题列表

我对中间人和红宝石缺乏经验,但我一直在努力让Slate工作,所以它在构建时生成一个侧面导航/标题列表而不是客户端使用javascript.我遇到的问题是让代码包含来自partials的头文件.

目录结构的一个示例:

Source
+--config.rb
+--includes
  +--file.md
  +--otherfile.md
+--index.html
+--layouts
  +--layout.erb
Run Code Online (Sandbox Code Playgroud)

布局和config.rb的要点

Config.rb代码段:

require 'nokogiri'

helpers do   
def toc_data(page_content)
    html_doc = Nokogiri::HTML::DocumentFragment.parse(page_content)

    # get a flat list of headers
    headers = []
    html_doc.css('h1, h2, h3').each do |header|
      headers.push({
        id: header.attribute('id').to_s,
        content: header.content,
        level: header.name[1].to_i,
        children: []
      })
    end

    [3,2].each do |header_level|
      header_to_nest = nil
      headers = headers.reject do |header|
        if header[:level] == header_level
          header_to_nest[:children].push header if header_to_nest
          true
        else
          header_to_nest = header if header[:level] == (header_level - 1)
          false …
Run Code Online (Sandbox Code Playgroud)

ruby nokogiri padrino middleman github-pages

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