和sinatra一起玩,我遇到了一个小问题:当我使用带有斜线的参数时,它会混淆路由器引擎.那么有一种很好的方法来处理这种param而不必编码吗?
代码看起来像
get 'add/:url' do
#....
end
Run Code Online (Sandbox Code Playgroud)
我打算让像/添加/ http://sctackoverflow.com/工作
我有一个Sinatra应用程序,它以只读或可编辑的方式提供页面,具体取决于用户是否已登录.
控制器设置一个变量@can_edit,视图使用该变量来隐藏/显示编辑链接.我怎样才能@can_edit在测试中测试它的价值?我不知道如何在Rack :: Test下获取控制器的当前实例.
我用来在控制器中class_eval存根logged_in?方法,但是我不得不求助于检查last_response.body我的编辑链接以查看是否@can_edit已经设置.
我该如何@can_edit直接测试其值?
嗨大家我用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)
任何人都可以如何摧毁它?如果有人启发我如何更新嵌入式文档会很棒.
在.NET中是否有像Sinatra,Ramaze等类似的框架?
我理论上是在一个框架之后,让我创建一个完整的webapp,只有一个类文件(概念上)像Sinatra.
我将把它用于内部工作 - ASP.NET MVC过于"大"(并且我对它的用法感到困惑)并且我现在已经掌握了WebForms(做一个基于webforms的大项目,目前讨厌它;))
有什么建议?
哦,我需要能够在IIS中托管它.我会和Sinatra一起去IronRuby,但我找不到在IIS中设置它的一步一步的啧啧;)
我正在努力让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代码,将我的主文件分成单独的文件,使用此响应中的一些提示,我遇到了部署到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) 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)
知道为什么耙子花了很多次?谢谢
如何将来自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转换为文件.
我正在尝试使用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) 在一个类似的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散列(它只显示为空) - 似乎是一个问题范围.
sinatra ×10
ruby ×6
heroku ×2
asp.net-mvc ×1
coffeescript ×1
data-uri ×1
deployment ×1
frameworks ×1
hash ×1
iis ×1
jruby ×1
json ×1
mongomapper ×1
parameters ×1
phantomjs ×1
rack ×1
rake ×1
routes ×1
routing ×1
sanitize ×1
testing ×1
watir ×1