标签: sinatra

使用用户密码加密数据库数据的最佳方法是什么?

假设一个应用程序具有属于用户的特定数据,除了所有者之外,任何人都不应看到它。我使用 MySQL 数据库和 DataMapper ORM 映射器。该应用程序是在 Sinatra 上用 Ruby 编写的。

应用行为:

  1. 用户注册一个帐户。创建用户名和密码。
  2. 登录到他的仪表板。
  3. 必须保护特定表中的某些字段。

基本上,我正在寻找模型属性的自动加密。像这样的东西:

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)

我认为动态加密/解密会导致性能问题,但这没关系。至少如果这有效的话——我很好。

有什么想法如何做到这一点?

ruby database encryption sinatra

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

如何使用 Sinatra 指定自定义 Sass 目录

我不想从默认的“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") }为我做好准备吗?

ruby routes path sass sinatra

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

测试使用会话的 Sinatra 应用程序

如何测试使用会话的 Sinatra 应用程序?

get "/", {}, {'rack.session' =>  { 'foo' => 'blah' } }
Run Code Online (Sandbox Code Playgroud)

这段代码对我不起作用,我在我的应用程序中有“启用:会话”。

testing session rack sinatra

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

部分访问 Sinatra 变量

我对 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)

但是,如果我将上面的代码放入部分代码中,它似乎不起作用。

任何帮助,将不胜感激。我确信我错过了一些简单的事情。

ruby sinatra

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

Sinatra 会议成员“失踪”

我已经成功解决了会话成员不可用的问题,即使它们已设置,我想知道为什么会发生这种情况。我的情况可以描述为:

  1. Sinatra 应用程序使用:session.
  2. 使用 oAuth 对用户进行授权,并在此过程中设置:ret_url会话成员,以便应用程序知道在身份验证后返回到哪里。
  3. 服务器是 Cedar 堆栈上的独角兽 (Heroku)

这在本地运行时效果很好,但: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 有效。

ruby session heroku sinatra

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

使用 Rack::Timeout 时的 NewRelic 报告

我们运行在一个环境(Heroku)中,超过 30 秒的请求将被中断。因此,我们的 Web 服务器 (Unicorn) 设置为 15 秒后中止。我们注意到,当请求被中断时,NewRelic 中似乎不会记录任何信息。

关于如何解决这个问题有什么建议吗?我的第一个想法是使用 Rack::Timeout 让 Rack 取消请求。这可以与 newrelic_rpm 一起使用吗?newrelic 是在中间件链的哪个位置注入的?

我们正在使用 Sinatra 运行 Ruby 1.9.3。

先感谢您!

ruby rack sinatra newrelic

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

如何使用“like”进行续集查询?

我正在尝试实现一个表单来搜索我的帖子标题。

这是控制器代码:

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)

我收到一条错误消息,提示“未定义方法‘类似’:标题:符号”。

ruby sinatra sequel

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

如果我点击链接,Heroku 上的 Sinatra 应用程序会以 Forbidden 响应

我创建了一个小的 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,一切都会按预期进行。

ruby heroku sinatra puma

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

无法在 git bash 终端中运行“gem install bundle”

我是使用 Sinatra 进行 Web 开发的新手。我一直在尝试在 git-bash 终端中运行bundle install命令,但它说:

**bash: bundle:** 命令未找到

然后我尝试安装 bundler但后来我一直收到这个错误:

**bash: gem:** 命令未找到

我什至无法在 git-bash 终端中运行 gem install bundler 命令。请告诉我该怎么办 ??

我正在 Windows 7 x64 位系统上工作。

git bash sinatra

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

如何在 Sinatra 中读取标题?

在 Rails 中,我可以读取标题

request.headers['HTTP_CF_CONNECTING_IP']
Run Code Online (Sandbox Code Playgroud)

我怎样才能在 Sinatra 中做到这一点?

ruby sinatra

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

标签 统计

sinatra ×10

ruby ×8

heroku ×2

rack ×2

session ×2

bash ×1

database ×1

encryption ×1

git ×1

newrelic ×1

path ×1

puma ×1

routes ×1

sass ×1

sequel ×1

testing ×1