假设一个应用程序具有属于用户的特定数据,除了所有者之外,任何人都不应看到它。我使用 MySQL 数据库和 DataMapper ORM 映射器。该应用程序是在 Sinatra 上用 Ruby 编写的。
应用行为:
基本上,我正在寻找模型属性的自动加密。像这样的东西:
class Transaction
include DataMapper::Resource
property :id, Serial
property :value, String, :length => 1024, :encrypted => true
... etc ...
belongs_to :user
end
Run Code Online (Sandbox Code Playgroud)
我认为动态加密/解密会导致性能问题,但这没关系。至少如果这有效的话——我很好。
有什么想法如何做到这一点?
我不想从默认的“views”目录中提供我的 Sass 文件,而是将其更改为/assets/sass
以下尝试位于应用程序的主 ruby 根文件中:
尝试1:
set :sass, Proc.new { File.join(root, "assets/sass") }
get '/stylesheet.css' do
sass :core
end
Run Code Online (Sandbox Code Playgroud)
这样我得到以下错误:
myapp.rb:17 NoMethodError: undefined method `merge' for "/Users/x/x/x/mysinatraapp/assets/sass":String
Run Code Online (Sandbox Code Playgroud)
尝试2:
get '/stylesheet.css' do
sass :'/assets/sass/core'
end
Run Code Online (Sandbox Code Playgroud)
尝试3:
get '/stylesheet.css' do
sass :'/assets/sass/core'
end
Run Code Online (Sandbox Code Playgroud)
两者都返回以下错误:
Errno::ENOENT: No such file or directory - ./views/assets/sass/core.sass
Run Code Online (Sandbox Code Playgroud)
尝试4:
get '/stylesheet.css' do
sass :'../assets/sass/core'
end
Run Code Online (Sandbox Code Playgroud)
这有效!但是,一定有什么东西可以set :sass, Proc.new { File.join(root, "assets/sass") }为我做好准备吗?
如何测试使用会话的 Sinatra 应用程序?
get "/", {}, {'rack.session' => { 'foo' => 'blah' } }
Run Code Online (Sandbox Code Playgroud)
这段代码对我不起作用,我在我的应用程序中有“启用:会话”。
我对 Sinatra 相当陌生,我正在尝试从部分内部访问数据库中的数据。
这是我想要在页面上显示的部分的示例:
<% @articles.each do |article| %>
<ul>
<li> <%= article.articleName %> </li>
</ul>
<% end %>
Run Code Online (Sandbox Code Playgroud)
如果我只是设置一条像这样的路线,效果很好
get '/articles' do
@article = Articles.all
erb :articles
end
Run Code Online (Sandbox Code Playgroud)
和 /articles 页面类似
<% @articles.each do |article| %>
<article>
<p> <%= article.articleName %> </p>
<p> <%= article.articleBody %> </p>
</article>
<% end %>
Run Code Online (Sandbox Code Playgroud)
但是,如果我将上面的代码放入部分代码中,它似乎不起作用。
任何帮助,将不胜感激。我确信我错过了一些简单的事情。
我已经成功解决了会话成员不可用的问题,即使它们已设置,我想知道为什么会发生这种情况。我的情况可以描述为:
:session.:ret_url会话成员,以便应用程序知道在身份验证后返回到哪里。这在本地运行时效果很好,但:ret_url会话成员从 Heroku 上的会话中完全消失了。我发现如果我删除这段代码就可以解决问题:
before do
cache_control :public, :must_revalidate, :max_age => 60
end
Run Code Online (Sandbox Code Playgroud)
问题 1:我猜测我的 cookie 被缓存:ret_url但没有值,这就是它被破坏的原因?
问题 2:我按照下面的路由条件代码所示设置会话成员,这是错误的地方吗?
# redirect users to login if necessary
set(:auth) do |access_token|
condition do
if request.request_method == 'GET'
session[:ret_url] = request.path_info
end
redirect '/' unless user_logged_in?
end
end
Run Code Online (Sandbox Code Playgroud)
我想使用缓存并且仍然让我的 cookie 有效。
我们运行在一个环境(Heroku)中,超过 30 秒的请求将被中断。因此,我们的 Web 服务器 (Unicorn) 设置为 15 秒后中止。我们注意到,当请求被中断时,NewRelic 中似乎不会记录任何信息。
关于如何解决这个问题有什么建议吗?我的第一个想法是使用 Rack::Timeout 让 Rack 取消请求。这可以与 newrelic_rpm 一起使用吗?newrelic 是在中间件链的哪个位置注入的?
我们正在使用 Sinatra 运行 Ruby 1.9.3。
先感谢您!
我正在尝试实现一个表单来搜索我的帖子标题。
这是控制器代码:
post '/search' do
@results = Post.all(:Title.like => "%#{params[:query]}%")
erb :layout
end
Run Code Online (Sandbox Code Playgroud)
这是layout.erb代码:
<form action="/search" method="post">
<input type="text" name="query"/><br />
<input type="submit" />
</form>
<% if @results %>
<table>
<%@results.each do |r|%>
<tr valign="top">
<td><%=r.Title%></td>
</tr>
<%end%>
</table>
<% end %>
Run Code Online (Sandbox Code Playgroud)
我收到一条错误消息,提示“未定义方法‘类似’:标题:符号”。
我创建了一个小的 Sinatra 应用程序并使用 Puma 来运行它。我已经将我的应用程序部署到 Heroku 并且一切正常,但是如果我按照指向我的应用程序的外部链接,我会收到响应Forbidden。这是从哪里来的?
该应用程序仅定义了一种 HTTP 方法:
require 'sinatra'
get '/' do
headers 'Content-Type' => 'application/json'
body 'Hello World'
end
Run Code Online (Sandbox Code Playgroud)
例如,遵循https://contactsampleprovider.herokuapp.com/将导致Forbidden,但在浏览器中手动输入 URL 工作正常。
如果我省略headers-call,一切都会按预期进行。
我是使用 Sinatra 进行 Web 开发的新手。我一直在尝试在 git-bash 终端中运行bundle install命令,但它说:
然后我尝试安装 bundler但后来我一直收到这个错误:
我什至无法在 git-bash 终端中运行 gem install bundler 命令。请告诉我该怎么办 ??
我正在 Windows 7 x64 位系统上工作。
在 Rails 中,我可以读取标题
request.headers['HTTP_CF_CONNECTING_IP']
Run Code Online (Sandbox Code Playgroud)
我怎样才能在 Sinatra 中做到这一点?