我正在开发Mobile/VOIP域中的应用程序.这对我来说真的是个灰色地带.以下是有关该应用程序的一些细节:
我们拥有内置于Perl的核心系统(它是一个为许多其他VOIP /移动相关服务提供服务的遗留系统),以及一个跟踪盈利和亏损的会计系统,但它已经变得非常复杂.因此我们决定单独制作此应用程序,并仅使用SMS/USSD和IVR.但是,该应用程序的每个用户必须是核心系统的注册用户才能进行会计处理; 这可以通过API调用轻松实现.
现在,为了发送IVR和USSD的回复/响应,我们需要在提供这些功能的供应商处部署应用程序.但我们不希望总是需要登录到他们的服务器以获取日常报告和会计资料,因为对于我们的每个客户,我们将为USSD/SMS/IVR系统提供不同的流程.
因此,我们决定将这个新应用程序分成两个子应用程序.
现在,将有许多此类客户端应用程序与单个中间件应用程序交互.我们决定用Ruby构建这些应用程序.我将遵循RESTful架构,因为涉及到许多API调用.
在这三个框架中,Rails,Padrino或Sinatra是否特别适合这个项目?如果可能的话,我将很感激比较详细的相关利弊.
对于Ruby来说有些新东西我正在探索现有的库来执行我通常在其他脚本语言中所做的事情,而且我对可能用于构建在Sinatra/Sequel(Rails之上)的东西的本地化库感到有点困惑/ AR根据我的口味有点过于自以为是.
现在,我通过这个wiki页面遇到了一对(i18n,r18n,GetText),显然在Padrino中使用了一个额外的库(基于来自Rails的i18n的东西?); 而且显然还有更多.
除了显而易见的(即GetText mo/po样式与yml文件)之外,我对这些选项如何不同感到困惑.除了说它们存在之外,维基在这方面并没有太多指出; 不是他们如何不同.
更令人困惑的是,基本上每一篇文档似乎都涵盖了其中的一篇(通常在RoR上下文中).而且,这些选项在仔细检查时看起来并不完全不相容 - 从某种意义上说,如果我理解这一点,他们可以在很大程度上理解彼此的文件.
这里的任何人都可以对这些库进行快速和简要的解释/概述,并概述它们之间的区别吗?关于性能的一些指示也是受欢迎的,如果你知道任何(除了来自fast_gettext文档的那些,考虑到我对这些选项之间的差异缺乏理解,这没什么意义).
我最近克隆了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) 我试图在我的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) 我需要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) 我使用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)
我阅读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'
刚掰开主模板文件成小块.
是正确的方法吗?何时/何地我想使用其他辅助函数?
我正在使用websocket-rack来构建一个聊天应用程序 API。
我想将 websocket 连接(最终成为 的一个实例Rack::WebSocket::Handler::Base::Connection
)存储在 redis 中,以便它们可以被其他进程过滤和引用。
我意识到我可以将连接存储在一个类变量中,但这在跨进程中不起作用。
对象本身显然不能存储在 redis 中,但是websocket_key
当我想向它发送消息时,我可以存储和其他一些信息并以某种方式重建连接对象吗?
除了标题之外,当从ActiveRecord加载数据时,尽管我尽最大努力强制编码,但编码始终设置为ASCII-8Bit.我已经在这里输入了尽可能详细的信息,试图建立一个可以用来帮助我的好错误报告!
该项目使用以下技术:
(完整名单)
$ 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) 我对中间人和红宝石缺乏经验,但我一直在努力让Slate工作,所以它在构建时生成一个侧面导航/标题列表而不是客户端使用javascript.我遇到的问题是让代码包含来自partials的头文件.
目录结构的一个示例:
Source
+--config.rb
+--includes
+--file.md
+--otherfile.md
+--index.html
+--layouts
+--layout.erb
Run Code Online (Sandbox Code Playgroud)
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) padrino ×10
ruby ×10
sinatra ×5
activerecord ×1
comparison ×1
encoding ×1
github-pages ×1
haml ×1
localization ×1
middleman ×1
mysql ×1
nokogiri ×1
redis ×1
rspec ×1
view ×1
vim ×1
websocket ×1