标签: sinatra

如何使用带有Sinatra斜线的参数?

sinatra一起玩,我遇到了一个小问题:当我使用带有斜线的参数时,它会混淆路由器引擎.那么有一种很好的方法来处理这种param而不必编码吗?

代码看起来像

get 'add/:url' do
   #....
end
Run Code Online (Sandbox Code Playgroud)

我打算让像/添加/ http://sctackoverflow.com/工作

ruby parameters routing routes sinatra

8
推荐指数
1
解决办法
5028
查看次数

使用Rack :: Test和Sinatra测试控制器实例变量

我有一个Sinatra应用程序,它以只读或可编辑的方式提供页面,具体取决于用户是否已登录.

控制器设置一个变量@can_edit,视图使用该变量来隐藏/显示编辑链接.我怎样才能@can_edit在测试中测试它的价值?我不知道如何在Rack :: Test下获取控制器的当前实例.

我用来在控制器中class_eval存根logged_in?方法,但是我不得不求助于检查last_response.body我的编辑链接以查看是否@can_edit已经设置.

我该如何@can_edit直接测试其值?

ruby testing rack sinatra

8
推荐指数
1
解决办法
2678
查看次数

如何删除mongomapper中的嵌入文档?

嗨大家我用mongomapper运行sinatra应用程序.我有一些名为Movie(Document)和Cover(EmbeddedDocument)的模型.我将封面嵌入到电影中

@movie.covers << @cover
@movie.save
Run Code Online (Sandbox Code Playgroud)

这非常有效.当点击@ movies.covers时,我得到了一系列嵌入式文档.但我无法破坏嵌入式文档.我试过这样的事

@movie.covers.each do |c|
c.destroy
end

NoMethodError: undefined method `destroy' for #<Cover:0xb7b20734>
 from (irb):5
 from /usr/lib/ruby/gems/1.8/gems/mongo_mapper-0.6.8/lib/mongo_mapper/associations/proxy.rb:85:in `call'
 from /usr/lib/ruby/gems/1.8/gems/mongo_mapper-0.6.8/lib/mongo_mapper/associations/proxy.rb:85:in `method_missing'
 from /usr/lib/ruby/gems/1.8/gems/mongo_mapper-0.6.8/lib/mongo_mapper/associations/proxy.rb:85:in `each'
 from /usr/lib/ruby/gems/1.8/gems/mongo_mapper-0.6.8/lib/mongo_mapper/associations/proxy.rb:85:in `send'
 from /usr/lib/ruby/gems/1.8/gems/mongo_mapper-0.6.8/lib/mongo_mapper/associations/proxy.rb:85:in `method_missing'
 from (irb):4
 from :0
Run Code Online (Sandbox Code Playgroud)

任何人都可以如何摧毁它?如果有人启发我如何更新嵌入式文档会很棒.

ruby-on-rails sinatra mongomapper

8
推荐指数
1
解决办法
3793
查看次数

.NET中的Sinatra,Ramaze等小型Web框架

在.NET中是否有像Sinatra,Ramaze等类似的框架?

我理论上是在一个框架之后,让我创建一个完整的webapp,只有一个类文件(概念上)像Sinatra.

我将把它用于内部工作 - ASP.NET MVC过于"大"(并且我对它的用法感到困惑)并且我现在已经掌握了WebForms(做一个基于webforms的大项目,目前讨厌它;))

有什么建议?

哦,我需要能够在IIS中托管它.我会和Sinatra一起去IronRuby,但我找不到在IIS中设置它的一步一步的啧啧;)

iis asp.net-mvc frameworks sinatra

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

如何在Sinatra中使用coffeescript

我正在努力让coffeescript与Sinatra合作.我对这两种技术都不熟悉,所以这可能是愚蠢的.我的问题似乎是coffeescript编译为javascript但不在页面上执行,而是显示为html.

#sinatra app
require 'coffee-script'
get "/test.js" do
  coffee :hello
end

#hello.coffee
alert "hello world"

#My page (/test.js) doesn't execute the js - just displays the code

#On screen in the browser I get this:
   (function() {
  alert("hello world");
}).call(this);

#In the HTML I get this within the body tags

<pre style="word-wrap: break-word; white-space: pre-wrap;">(function() {
  alert('hello world!');
}).call(this);
</pre>
Run Code Online (Sandbox Code Playgroud)

sinatra coffeescript

8
推荐指数
1
解决办法
8154
查看次数

在heroku雪松堆栈上部署sinatra应用程序(使用config.ru)

我正在尝试重构我的sinatra代码,将我的主文件分成单独的文件,使用此响应中的一些提示,我遇到了部署到heroku的麻烦.

以前我没有config.ru文件,只是使用了我的Procfile,这是:

web: bundle exec ruby web.rb -p $PORT
Run Code Online (Sandbox Code Playgroud)

根据这篇文章.

从重构开始,我现在改变了我Procfile的意思

web: bundle exec thin -R config.ru start -p $PORT
Run Code Online (Sandbox Code Playgroud)

随着我的config.ru文件正在

root = ::File.dirname(__FILE__)
require ::File.join( root, 'web' )
run MyApp.new
Run Code Online (Sandbox Code Playgroud)

我的web.rb文件包含在类定义中

class MyApp < Sinatra::Application
  # ...
end
Run Code Online (Sandbox Code Playgroud)

这适用于我的本地开发计算机,但是当我部署到heroku时,我得到了

2011-12-01T11:21:54+00:00 app[web.1]: bundler: command not found: thin
2011-12-01T11:21:54+00:00 app[web.1]: Install missing gem executables with `bundle install`
2011-12-01T11:21:56+00:00 heroku[web.1]: State changed from starting to crashed
2011-12-01T11:22:01+00:00 heroku[router]: …
Run Code Online (Sandbox Code Playgroud)

ruby deployment heroku sinatra

8
推荐指数
1
解决办法
5181
查看次数

如何加快Ruby/Rake任务的速度

rake --tasks需要大约18秒才能运行.这只是加载所有任务所需的时间,因此我定义的任何任务至少需要花费这么多时间才能运行:

$time rake --tasks
rake db:clean           # Cleaning up database
rake passenger:restart  # Restart Application
rake spec               # Run specs

real    0m18.816s
user    0m7.306s
sys 0m5.665s
Run Code Online (Sandbox Code Playgroud)

我的Rakefile:

$: << "."
require "rubygems"
require "rspec/core/rake_task"

desc "Run those specs"
task :spec do
  RSpec::Core::RakeTask.new(:spec) do |t|
    t.rspec_opts = %w{--colour --format progress}
    t.pattern = 'spec/*_spec.rb'
  end
end

task :default  => :spec
Run Code Online (Sandbox Code Playgroud)

知道为什么耙子花了很多次?谢谢

ruby rake sinatra

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

如何在Ruby中将数据URI转换为文件

如何将来自FileReader API结果的数据URI转换为可以保存在Ruby文件系统中的图像文件?

我目前要做的是使用base64解码将data_uri字符串转换data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgA...为base 64编码字符串,因为根据此stackoverflow答案,我需要将所有空格实例替换为+.答案是在PHP,但我目前正在研究Ruby和Sinatra所以我不确定它是否仍然适用,但在使用等效代码时:

src = data_uri.gsub! ' ', '+'
src = Base64.decode64(src)
f = File.new('uploads/' + 'sample.png', "w")
f.write(src)
f.close
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

undefined method `unpack' for nil:NilClass
Run Code Online (Sandbox Code Playgroud)

我在这里想要实现的是能够将数据URI转换为文件.

ruby sinatra data-uri

8
推荐指数
1
解决办法
3046
查看次数

Watir应用程序部署到heroku

我正在尝试使用Watir webdriver将应用程序部署到Heroku.它在本地成功运行.根据这个问题的答案:你能在Heroku上部署Watir来生成HTML快照吗?如果是这样,怎么样?, 你能行的.我按照这个答案的步骤/sf/answers/1488716351/.我的app.rb看起来像这样:

require "sinatra"
require "rubygems"
require "shotgun"
require "rake"
require "watir"

get '/sending_out' do 
    browser = Watir::Browser.new :phantomjs
    erb :index
end
Run Code Online (Sandbox Code Playgroud)

但是当使用这些日志部署到Heroku时它会崩溃:

2014-10-24T13:01:10.620468+00:00 app[web.1]:    /app/vendor/bundle/ruby/2.1.0/gems/selenium-webdriver-2.43.0/lib/selenium/webdriver/firefox/launcher.rb:32:in `launch'
2014-10-24T13:01:10.620465+00:00 app[web.1]:    /app/vendor/bundle/ruby/2.1.0/gems/selenium-webdriver-2.43.0/lib/selenium/webdriver/firefox/launcher.rb:35:in `block in launch'
2014-10-24T13:01:10.620480+00:00 app[web.1]:    credits.rb:44:in `rencredit'
2014-10-24T13:01:10.620496+00:00 app[web.1]:    /app/vendor/bundle/ruby/2.1.0/gems/sinatra-1.4.5/lib/sinatra/base.rb:1004:in `process_route'
2014-10-24T13:01:10.620510+00:00 app[web.1]:    /app/vendor/bundle/ruby/2.1.0/gems/sinatra-1.4.5/lib/sinatra/base.rb:1058:in `block in invoke'
2014-10-24T13:01:10.620534+00:00 app[web.1]:    /app/vendor/bundle/ruby/2.1.0/gems/sinatra-1.4.5/lib/sinatra/base.rb:217:in `call'
2014-10-24T13:01:10.620590+00:00 app[web.1]:    /app/vendor/ruby-2.1.2/lib/ruby/2.1.0/webrick/httpserver.rb:138:in `service'
2014-10-24T13:01:10.620460+00:00 app[web.1]:    /app/vendor/bundle/ruby/2.1.0/gems/selenium-webdriver-2.43.0/lib/selenium/webdriver/firefox/binary.rb:60:in `execute'
2014-10-24T13:01:10.620475+00:00 app[web.1]:    /app/vendor/bundle/ruby/2.1.0/gems/watir-webdriver-0.6.11/lib/watir-webdriver/browser.rb:46:in `initialize'
2014-10-24T13:01:10.620491+00:00 app[web.1]:    /app/vendor/bundle/ruby/2.1.0/gems/sinatra-1.4.5/lib/sinatra/base.rb:966:in `block (2 levels) in route!'
2014-10-24T13:01:10.620506+00:00 app[web.1]:    /app/vendor/bundle/ruby/2.1.0/gems/sinatra-1.4.5/lib/sinatra/base.rb:1058:in `invoke' …
Run Code Online (Sandbox Code Playgroud)

ruby heroku watir sinatra phantomjs

8
推荐指数
1
解决办法
1879
查看次数

我如何消毒进入Sinatra应用程序的所有参数?

在一个类似的Rails应用程序中,我能够创建一个递归的哈希检查函数,然后运行Sanitize gem的clean/fragment方法从传入的params哈希中删除任何HTML元素.我在application_controller中使用了一个前置过滤器,所以一切都在应用程序范围内被清除(这是一个很棒的应用程序).

背景故事:XSS攻击是可能的,特别是在IE浏览器中,但实际上我们不希望任何这些东西被保存到数据库中.虽然最终目标是JSON输出不包含它.

我试图在Sinatra应用程序(它有一些ActiveSupport和JRuby ActiveRecord捆绑在一起)中做同样的事情,但是Sanitize gem不会捆绑,因为这个特定的应用程序在JRuby中运行由于某些数据库原因.Sanitize需要Nokogiri,而Nokogiri又需要Nokogumbo,后者不会在这个JRuby环境中构建.

因此我尝试使用Rack :: Util内置的html转义方法在app.rb中进行前置过滤,但这会炸毁应用程序.

有没有其他方法可以考虑

1)将所有传入的参数消毒到(JRuby)Sinatra应用程序中

如果没有,一个较小的选择:

2)使所有被解析的JSON清理所述JSON属性值列表中的值?

PS - 这里的部分问题是,一个包含的本地gem,它处理了许多params并进行JSON渲染,证明无法调试.我将在主机应用程序和本地链接的宝石中包含Pry,当我尝试撬入宝石时,我无法查看params散列(它只显示为空) - 似乎是一个问题范围.

hash json jruby sanitize sinatra

8
推荐指数
1
解决办法
1254
查看次数