标签: sinatra

对象上的 Ruby to_json 输出实例变量

我正在使用 Sinatra 并尝试通过使用 'json' gem 并调用 .to_json 方法来输出 JSON 中的对象。我期望输出为 JSON,其中包含 attr_reader 部分中的符号及其值。

这是我的代码。我需要做一些特别的事情才能让它发挥作用吗?

require "sinatra"
require "json"    

class Foo
  attr_reader :id, :name

  def initialize(id, name)
    @id = id
    @name = name
  end
end

get '/start' do
  content_type :json
  Foo.new(2, "john").to_json
end
Run Code Online (Sandbox Code Playgroud)

我从输出中得到的只是对象默认的 to_s。

"#<Foo:0x007fe372a3ba80>"
Run Code Online (Sandbox Code Playgroud)

ruby json sinatra

2
推荐指数
1
解决办法
3039
查看次数

使用 Nokogiri 禁用 XML 中的 HTML 转义

我正在尝试从 Google Directions API 解析 XML 文档。

这是我到目前为止所得到的:

x = Nokogiri::XML(GoogleDirections.new("48170", "48104").xml)
x.xpath("//DirectionsResponse//route//leg//step").each do |q|
  q.xpath("html_instructions").each do |h|
    puts h.inner_html
  end
end
Run Code Online (Sandbox Code Playgroud)

输出如下所示:

Head &lt;b&gt;south&lt;/b&gt; on &lt;b&gt;Hidden Pond Dr&lt;/b&gt; toward &lt;b&gt;Ironwood Ct&lt;/b&gt;
Turn &lt;b&gt;right&lt;/b&gt; onto &lt;b&gt;N Territorial Rd&lt;/b&gt;
Turn &lt;b&gt;left&lt;/b&gt; onto &lt;b&gt;Gotfredson Rd&lt;/b&gt;
...
Run Code Online (Sandbox Code Playgroud)

我希望输出是:

Turn <b>right</b> onto <b>N Territorial Rd</b>
Run Code Online (Sandbox Code Playgroud)

问题似乎是 Nokogiri 在 xml 中转义了 html

我信任谷歌,但我认为进一步清理它也很好:

Turn right onto N Territorial Rd
Run Code Online (Sandbox Code Playgroud)

但如果没有原始 xml,我就不能(也许使用清理)。有想法吗?

ruby sinatra nokogiri

2
推荐指数
1
解决办法
3534
查看次数

设计数独网格

我创建了一个数独拼图创建器/求解器,需要一些 CSS 帮助来设计它的样式。

通常,它们的样式如下:

.

我正在使用的一些命名。

单元格- 每个单独的单元格包含一个数字。

盒子- 9 个盒子之一,每个盒子包含 3 x 3 个单元格

网格- 整个 9x9 比赛区域。

我的 html 部分是由我的 ruby​​ / Sinatra 应用程序生成的(至少重复的 DIV 是)并且结构如下:

#game {
  margin-left: auto;
  margin-right: auto;
  width: 360px;
}
.cell input {
  display: inline-block;
  float: left;
  width: 40px;
  height: 40px;
  border-style: solid;
  border-width: 1px;
  text-align: center;
  font-size: 15px;
}
Run Code Online (Sandbox Code Playgroud)
<form action="/" method="post">
  <div id="game">
    <div class="cell">
      <input name="cell[0]" type="text" maxlength="1" value=<%=val%>>
    </div>

    <div class="cell">
      <input name="cell[1]" type="text" maxlength="1" value=<%=val%>> …
Run Code Online (Sandbox Code Playgroud)

html css ruby sinatra

2
推荐指数
2
解决办法
1万
查看次数

任务 create_release 时出现 Capistrano 部署错误

各位开发者早上好!

\n\n

这是我在 Stackoverflow 上的第一篇文章!

\n\n

我在部署 Sinatra 应用程序时遇到问题,并且不明白为什么它不起作用,所以我可能需要你们中的一位的帮助。

\n\n

当我运行以下命令时

\n\n
bundle exec cap staging deploy\n
Run Code Online (Sandbox Code Playgroud)\n\n

我收到以下错误(创建了 config/deploy.rb 文件以及 config/deploy/staging.rb):

\n\n
 INFO [864af525] Running /usr/bin/env git archive development | tar -x -C /var/www/mykio-admin/releases/20131224102759 on <our server address>\nDEBUG [864af525] Command: cd /var/www/mykio-admin/repo && ( GIT_ASKPASS=/bin/echo GIT_SSH=/tmp/mykio-admin/git-ssh.sh /usr/bin/env git archive development | tar -x -C /var/www/mykio-admin/releases/20131224102759 )\nDEBUG [864af525]    fatal: Not a valid object name\nDEBUG [864af525]    \nDEBUG [864af525]    tar: \nDEBUG [864af525]    Ceci ne ressemble pas \xc3\xa0 une archive de type \xc2\xab …
Run Code Online (Sandbox Code Playgroud)

ruby capistrano sinatra

2
推荐指数
1
解决办法
1591
查看次数

Sinatra 应用程序 heroku push 中的“未检测到 Procfile”

我是 Sinatra 和 heroku 的新手。我正在尝试将一个小型 Sinatra 应用程序推送到 heroku,但出现此错误,

 Bundle completed (24.34s)
   Cleaning up the bundler cache.
-----> WARNINGS:
       No Procfile detected, using the default web server (webrick)
       ##I have gone over the docs a few times and added unicorn 
       https://devcenter.heroku.com/articles/ruby-default-web-server
-----> Discovering process types
       Procfile declares types -> (none)
       Default types for Ruby  -> console, rake, web

-----> Compressing... done, 17.5MB
-----> Launching... done, v8
Run Code Online (Sandbox Code Playgroud)

这就是我的 gem 文件的样子

   source 'https://rubygems.org'
   ruby '2.1.1'
   gem 'sinatra'
   gem 'sinatra-contrib'
   gem 'typhoeus'
   gem 'pry' …
Run Code Online (Sandbox Code Playgroud)

heroku sinatra procfile

2
推荐指数
1
解决办法
1824
查看次数

Sinatra、Twitter 和 StringIO

Twitter API允许你通过他们的媒体添加到您的鸣叫update_with_tweet方法。

我正在使用SinatraTwitter设置了所有配置。我能够成功地使用我的应用发布推文。

我的应用程序读取网页,从该页面提取照片,然后应该将它们单独发布到 Twitter。我成功地使用Nokogiri.

但是,我无法将这些照片转换为Twitter允许的媒体类型。因为我也在使用urigem,给出这个例子:photo_url = "placekitten.com/300/300",我可以调用media = open(photo_url),这会返回一个StringIO.

但是,当我尝试将新存储的媒体与我的帖子一起发布给Twitter我时,出现了The IO object for media must respond to to_io (Twitter::Error::UnacceptableIO).

我试图弄清楚如何正确格式化/调用图像,以便我可以成功地将其发布到 Twitter。

twitter sinatra stringio

2
推荐指数
1
解决办法
624
查看次数

如何处理 Sinatra 中单个选择字段中的多个值?

我有一个 HTML 表单,页面中有一个元素,该元素是 Sinatra 应用程序的一部分,例如

<form action="/form" method="post">
  <p>
    <label for="text">Text</label>
    <input type="text" name="text" id="text">
  </p>

  <p>
    <label for="select">Selection</label>
    <select name="select" id="select">
      <option value="A">A</option>
      <option value="B">B</option>
      <option value="C">C</option>
    </select>
  </p>

  <p>
    <label for="multi_select" multiple>MultipleSelection</label>
    <select name="multi_select" id="multi_select" multiple>
      <option value="A">A</option>
      <option value="B">B</option>
      <option value="C">C</option>
    </select>
  </p>

  <p>
    <input type="submit" name="submit" value="Submit">
  </p>
</form>
Run Code Online (Sandbox Code Playgroud)

如果用户从 multi_select 中选择 A & C,Sinatra 中的 POST 处理程序应该返回选定的值,但由于params是散列,它只返回最后选定的值(so params[:multi_select]= "C")。

由于各种原因,我无法使用 Javascript 或其他前端技巧来更改值的发送方式。有没有好的方法可以在服务器端正确处理这个问题?在此项目之前,我与 Sinatra 的合作不多。

html ruby post select sinatra

2
推荐指数
1
解决办法
1012
查看次数

从 sinatra 返回 base64 图像

我想在电子邮件中提供跟踪图像。

该电子邮件将调用将返回图像的 sinatra 路由。

在 Rails 中,我会这样做:

send_data Base64.decode64("R0lGODlhAQABAPAAAAAAAAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=="), type: "image/gif", disposition: "inline"
Run Code Online (Sandbox Code Playgroud)

我将如何在 sinatra 中做到这一点?

ruby sinatra

2
推荐指数
1
解决办法
487
查看次数

Sinatra::Reloader 未重新加载 Docker 容器中的文件

我正在尝试在 Docker 容器中设置一个简单的 sinatra 应用程序。我已经在机架上设置了模块化 Sinatra 应用程序config.ru

require 'rubygems'
require 'sinatra'
require "sinatra/reloader"

Dir[File.dirname(__FILE__) + '/controllers/*.rb'].each {|file| require file}

#map controllers
map('/') {run WebController}
Run Code Online (Sandbox Code Playgroud)

单控制器/controllers/hello.rb

class WebController < Sinatra::Base

  register Sinatra::Reloader

  get '/' do
    "Hello World"
  end

  get '/test' do
    "Hello World I'm a docker app"
  end
end
Run Code Online (Sandbox Code Playgroud)

这是Dockerfile

FROM ruby:2.4.0
MAINTAINER Bugs Bunny <bbunny@rubyplus.com>

RUN apt-get update && \ apt-get install -y net-tools

# Install gems
ENV APP_HOME /app
ENV HOME /root
RUN …
Run Code Online (Sandbox Code Playgroud)

ruby sinatra docker

2
推荐指数
1
解决办法
577
查看次数

Sinatra不支持多行?

对于以下代码,为什么只打印"World"

get '/' do
 "Hello"
 "World"
end
Run Code Online (Sandbox Code Playgroud)

ruby sinatra

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

标签 统计

sinatra ×10

ruby ×8

html ×2

capistrano ×1

css ×1

docker ×1

heroku ×1

json ×1

nokogiri ×1

post ×1

procfile ×1

select ×1

stringio ×1

twitter ×1