我正在使用 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) 我正在尝试从 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 <b>south</b> on <b>Hidden Pond Dr</b> toward <b>Ironwood Ct</b>
Turn <b>right</b> onto <b>N Territorial Rd</b>
Turn <b>left</b> onto <b>Gotfredson Rd</b>
...
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,我就不能(也许使用清理)。有想法吗?
我创建了一个数独拼图创建器/求解器,需要一些 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)各位开发者早上好!
\n\n这是我在 Stackoverflow 上的第一篇文章!
\n\n我在部署 Sinatra 应用程序时遇到问题,并且不明白为什么它不起作用,所以我可能需要你们中的一位的帮助。
\n\n当我运行以下命令时
\n\nbundle exec cap staging deploy\nRun 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) 我是 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) 将Twitter API允许你通过他们的媒体添加到您的鸣叫update_with_tweet方法。
我正在使用Sinatra并Twitter设置了所有配置。我能够成功地使用我的应用发布推文。
我的应用程序读取网页,从该页面提取照片,然后应该将它们单独发布到 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。
我有一个 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 的合作不多。
我想在电子邮件中提供跟踪图像。
该电子邮件将调用将返回图像的 sinatra 路由。
在 Rails 中,我会这样做:
send_data Base64.decode64("R0lGODlhAQABAPAAAAAAAAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=="), type: "image/gif", disposition: "inline"
Run Code Online (Sandbox Code Playgroud)
我将如何在 sinatra 中做到这一点?
我正在尝试在 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)