我使用 Rails 编程已经大约 7 个月了。主要是一个管理数据库的应用程序,你知道,清理、更新、删除、查找孤立条目等。
我有一个 API 可以与我们用 PHP 编写的桌面程序进行对话。我们现在发现自己想要将所有内容都转移到 Ruby。该 API 需要快如闪电,并且不会有任何类型的视图或 HTML 页面,它只会通过 JSON 与我们的应用程序通信,发送和接收应用程序将显示和使用的数据。
所以,基本问题是,我应该学习 Sinatra 和 Padrino(使用 ActiveRecord)并用它们构建 API,还是在 Rails 中进行?
如果我使用 Rails,我可以保留很多我拥有的代码,甚至可以使用现有的代码,因为所有表都是相同的(数据库是相同的),只需为 API 编写更多方法。
我认为这样做的缺点是双重的:
学习 Sinatra 和 Padrino 可能需要更多工作,但会带来更清晰的代码和一个用于 API 的单独 Ruby 应用程序,以及另一个用于维护的应用程序,这听起来更好。
但我对Sinatra和Padrino一无所知,占用空间和速度真的比Rails好吗?
我非常感谢那些实际使用过 Rails 和 Sinatra 以及 Padrino 的人对此的意见。
干杯。
我在 Sinatra 中有简单的会话身份验证。但是,我想在每个请求上运行这个方法,这样如果用户没有登录(例如,用户名等的会话变量没有设置),那么它们将被重定向到登录页面。我怎样才能做到这一点?
我有一个 Sinatra 脚本,我有一个通用方法或一组在多个地方使用的操作,我想将其抽象为一个方法。我无法找到帮助我完成此操作的文档,请问有人有任何想法吗?
一个典型的脚本如下所示:
require 'sinatra'
get '/' do
'Hello world!'
end
get '/statement' do
'Hello world!'
end
Run Code Online (Sandbox Code Playgroud)
如果我想创建一个函数greetings()
,该函数同时显示“Hello world”/
和 ,那么语法是什么/statement
?
我有一个带有经典 Sinatra(不是模块化 < Sinatra::Base)的旧项目。如何使它使用 Puma Web 服务器而不是 Thin?
我在互联网上找到的唯一使用 Puma 的例子是模块化 Sinatra。
参考:http : //www.sinatrarb.com/intro.html#Modular%20vs.%20Classic%20Style
如何在 Ruby 和 ERB(不是 Rails)中使用视图和布局?
今天我使用这个代码来呈现我的观点:
def render(template_path, context = self)
template = File.read(template_path)
ERB.new(template).result(context.get_binding)
end
Run Code Online (Sandbox Code Playgroud)
这工作得很好,但我如何实现相同的功能,但要在布局内呈现模板?我想调用 render_with_layout(template_path, context = self),这样它就有一个默认布局。
我创建了一个 sinatra 应用程序,并试图将它放在 github 页面上。我可以在本地主机上运行我的应用程序,但我不知道如何将它推送到实际的网络。
我尝试过谷歌搜索和搜索 stackoverflow,我一直看到人们使用 heroku。这是必需的吗?反正有没有直接从 sinatra 推送到网络?我可以得到一个简单的 index.html 文件在 github 页面上运行,但我不知道如何让我的 sinatra 应用程序运行。任何帮助都会很棒。
我刚刚在亚马逊的 AWS 上设置了一个 db.t2.micro 实例。我正在使用 sinatra 加载本地主机网页。我正在使用 Active Record 进行大约 30~ 次查询,加载需要 92 秒。它非常缓慢。我尝试执行此处列出的自定义参数:http : //docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_BestPractices.html#CHAP_BestPractices.PostgreSQL
这无助于加快速度。我不确定如何加速这个实例。这是我第一次托管数据库。任何帮助,将不胜感激。
当我运行我的 sinatra 应用程序时,它在本地(本地主机)托管。这是 30~ 个查询需要 92 秒才能加载的地方。当我在 Postgres 中运行 select * 语句时,它们只需要几秒钟。
在 Sinatra 中,如何重定向回路线?
require 'sinatra'
get "/A" do
redirect '/B'
end
get "/B" do
redirect request.referer
end
Run Code Online (Sandbox Code Playgroud)
这是代码,我希望“/B”带我回到“/A”。
现在,在浏览器中,在“/C”中,向“/A”发送一个获取请求。然后我会回到“/C”。原因是:
“request.referer”记录的是“/C”,因为“/A”中的重定向是由服务器发起的,不算是目标页面的referrer。
有一种 JavaScript 方法可以解决它(放在 /A 上):
<script type="text/javascript">window.location = '/B';</script>
Run Code Online (Sandbox Code Playgroud)
我的问题是如何重定向回服务器端的路由?
在Rails中我可以使用:
x = ActionController::Base.new.render_to_string(
template: "my_module/my_view_template",
locals: { my_var: in_my_var})
Run Code Online (Sandbox Code Playgroud)
这会将视图模板结果加载到Rails中的变量.我怎样才能在Sinatra做到这一点?
我对任何模板语言持开放态度,但我更喜欢Erubis.
任何非平凡的 Sinatra 应用程序都将拥有比放入一个大 Sinatra::Base 后代类更多的“路线”。说我想把它们放在另一个班级,什么是惯用语?另一个阶级是什么派生的?我如何将它“包含”在主要的 Sinatra 类中?
sinatra ×10
ruby ×8
erb ×2
activerecord ×1
frameworks ×1
function ×1
github ×1
heroku ×1
methods ×1
padrino ×1
performance ×1
postgresql ×1
puma ×1
rack ×1
request ×1
views ×1
web ×1