我在这里做了一个概念验证的事情,并且遇到了比我想象的更多的麻烦.这是我想要做的以及我目前是如何做的.
我发送我的Sinatra应用程序一个json文件,其中包含下面的简单消息.
[
{
title: "A greeting!",
message: "Hello from the Chairman of the Board"
}
]
Run Code Online (Sandbox Code Playgroud)
从那里我有一个帖子,我用它来获取参数并将它们写入sqlite数据库
post '/note' do
data = JSON.parse(params) #<---EDIT - added, now gives error.
@note = Note.new :title => params[:title],
:message => params[:message],
:timestamp => (params[:timestamp] || Time.now)
@note.save
end
Run Code Online (Sandbox Code Playgroud)
当我发送消息时,时间戳和id被保存到数据库,但标题和消息是零.
我错过了什么?
谢谢
编辑:
现在,当我运行我的应用程序并将其发送给json文件时,我收到此错误:
C:/Users/Norm/ruby/Ruby192/lib/ruby/1.9.1/webrick/server.rb:183:在'block in start_thread'中TypeError:无法将Hash转换为String
编辑2:取得了一些成功.
我在文件调用test.json中有上面的json,这是json的发布方式.为了发布我使用HTTPClient的文件:
require 'httpclient'
HTTPClient.post 'http://localhost:4567/note', [ :file => File.new('.\test.json') ]
Run Code Online (Sandbox Code Playgroud)
在考虑了一些之后,我认为发布文件是问题所以我尝试以不同的方式发送它.下面的示例一旦我将我的帖子/注释句柄更改为:
data = JSON.parse(request.body.read)
Run Code Online (Sandbox Code Playgroud)
我的新send.rb
require 'net/http'
require 'rubygems'
require 'json'
@host = 'localhost'
@port …Run Code Online (Sandbox Code Playgroud) 是否有一种简单的方法来运行sinatra(特别是padrino)应用程序"作为"rails应用程序?我想,应该有一些方法可以将"rails服务器"转换为"padrino start"或者其他东西......(我指的是主机用mod_rails主机rails.)
嗨提交表单'put'方法用于将数据从表单发送到sinatra.the put方法在app.rb中定义put方法调用erb文件显示两个值.
但没有任何东西可以展示,有人可以帮忙.
put '/form' do
@name = params[:FirstName]
@last = params[:LastName]
erb :formact
end
Run Code Online (Sandbox Code Playgroud)
形成
<form name="biodata" action="form" method="put" onsubmit="validateForm()">
code
</form>
Run Code Online (Sandbox Code Playgroud)
谢谢
我正在尝试创建一个模块化的sinatra应用程序,并需要我的每个子应用程序来查找views项目文件夹根目录下的目录.但它只查找子目录本身的视图目录而不是根目录.这是我的项目的样子:
??? config.ru
??? music_catalog
? ??? app.rb
??? public
? ??? css
? ? ??? site.css
? ??? images
? ??? content_top_bg.jpg
? ??? demo_image_01.jpg
? ??? god_save_http_it_aint_no_human_being.png
? ??? header_bg.jpg
? ??? home-showcase.png
? ??? hover_link_bg.jpg
? ??? its_little_its_blue_and_its_magical.jpeg
? ??? linkbar_bg.jpg
? ??? logo.png
? ??? main_graphics.jpg
? ??? placeholder.gif
? ??? placeholder.jpg
? ??? placeholder.png
? ??? right_navbar_bg.jpg
? ??? shadow_left.jpg
??? views
??? album.haml
??? genre.haml
??? index.haml
??? layout.haml
??? login.haml
??? …Run Code Online (Sandbox Code Playgroud) 我有一个sinatra应用程序,我想在其中进行下载功能.此下载从表中获取数据并为用户制作excel下载.
require 'csv'
get '/download' do
data = [{:name => "john", :age => 12, :state => 'ca'}, {:name => "tony", :age => 22, :state => 'va'}]
# I want to download this data as excel file and the content of file should be as follows:
# name,age,state
# john,12,ca
# tony,22,va
# I don't want to save data as a temp file on the server and then throw to user for download
# rather I want to stream data for …Run Code Online (Sandbox Code Playgroud) 我安装pry并尝试使用它.
gem "pry"
require 'pry'
#..........
binding.pry
Run Code Online (Sandbox Code Playgroud)
但有3个问题:
pry(#)> Error: execution expired /var/lib/gems/1.9.1/gems/pry-0.9.10/lib/pry/pry_instance.rb:600:in `getbyte' /var/lib/gems/1.9.1/gems/pry-0.9.10/lib/pry/pry_instance.rb:600:in `readline' /var/lib/gems/1.9.1/gems/pry-0.9.10/lib/pry/pry_instance.rb:600:in `block in readline' /var/lib/gems/1.9.1/gems/pry-0.9.10/lib/pry/pry_instance.rb:544:in `handle_read_errors' /var/lib/gems/1.9.1/gems/pry-0.9.10/lib/pry/pry_instance.rb:589:in `readline' /var/lib/gems/1.9.1/gems/pry-0.9.10/lib/pry/pry_instance.rb:369:in `retrieve_line' /var/lib/gems/1.9.1/gems/pry-0.9.10/lib/pry/pry_instance.rb:304:in `block in r' /var/lib/gems/1.9.1/gems/pry-0.9.10/lib/pry/pry_instance.rb:301:in `loop' /var/lib/gems/1.9.1/gems/pry-0.9.10/lib/pry/pry_instance.rb:301:in `r' /var/lib/gems/1.9.1/gems/pry-0.9.10/lib/pry/pry_instance.rb:271:in `re' /var/lib/gems/1.9.1/gems/pry-0.9.10/lib/pry/pry_instance.rb:251:in `rep' /var/lib/gems/1.9.1/gems/pry-0.9.10/lib/pry/pry_instance.rb:231:in `block (3 levels) in repl' /var/lib/gems/1.9.1/gems/pry-0.9.10/lib/pry/pry_instance.rb:230:in `loop' /var/lib/gems/1.9.1/gems/pry-0.9.10/lib/pry/pry_instance.rb:230:in `block (2 levels) in repl' /var/lib/gems/1.9.1/gems/pry-0.9.10/lib/pry/pry_instance.rb:229:in `catch' /var/lib/gems/1.9.1/gems/pry-0.9.10/lib/pry/pry_instance.rb:229:in `block in repl' /var/lib/gems/1.9.1/gems/pry-0.9.10/lib/pry/pry_instance.rb:228:in `catch' /var/lib/gems/1.9.1/gems/pry-0.9.10/lib/pry/pry_instance.rb:228:in `repl' /var/lib/gems/1.9.1/gems/pry-0.9.10/lib/pry/pry_class.rb:154:in `start' /var/lib/gems/1.9.1/gems/pry-0.9.10/lib/pry/core_extensions.rb:22:in `pry' /home/alex/Documents/ruby/my_projects/controllers/my_controller.rb:24:in `block in ' /var/lib/gems/1.9.1/gems/sinatra-1.3.3/lib/sinatra/base.rb:1265:in `call' /var/lib/gems/1.9.1/gems/sinatra-1.3.3/lib/sinatra/base.rb:1265:in `block in …
刚刚使用capistrano部署了一个ruby应用程序.我很确定我像往常一样做了一切.乘客虽然输出以下内容:
cannot load such file -- app.rb (LoadError)
config.ru:1:in `require'
config.ru:1:in `block in <main>'
/home/deploy/apps/blog/shared/bundle/ruby/2.0.0/gems/rack-1.5.2/lib/rack/builder.rb:55:in `instance_eval'
/home/deploy/apps/blog/shared/bundle/ruby/2.0.0/gems/rack-1.5.2/lib/rack/builder.rb:55:in `initialize'
config.ru:1:in `new'
config.ru:1:in `<main>'
/home/deploy/.rvm/gems/ruby-2.0.0-p353/gems/passenger-4.0.29/helper-scripts/rack-preloader.rb:108:in `eval'
/home/deploy/.rvm/gems/ruby-2.0.0-p353/gems/passenger-4.0.29/helper-scripts/rack-preloader.rb:108:in `preload_app'
/home/deploy/.rvm/gems/ruby-2.0.0-p353/gems/passenger-4.0.29/helper-scripts/rack-preloader.rb:153:in `<module:App>'
/home/deploy/.rvm/gems/ruby-2.0.0-p353/gems/passenger-4.0.29/helper-scripts/rack-preloader.rb:29:in `<module:PhusionPassenger>'
/home/deploy/.rvm/gems/ruby-2.0.0-p353/gems/passenger-4.0.29/helper-scripts/rack-preloader.rb:28:in `<main>'
**Application root**
/home/deploy/apps/blog/current
Run Code Online (Sandbox Code Playgroud)
app.rb实际上在此目录中.
我正在将我的Sinatra应用程序部署到Heroku,当我到达时,heroku logs我看到以下跟踪:
State changed from crashed to starting
configuration /app/config.ru not found
State changed from starting to crashed
at=error code=H10 desc="App crashed" method=GET path=/ host=... request_id=... status=503 bytes=
...heroku[router]: at=error code=H10 desc="App crashed" method=GET path=/favicon.ico host=... dyno= connect= service= status=503 bytes=
Starting process with command `bundle exec rackup config.ru -p 31614`
Process exited with status 1
Run Code Online (Sandbox Code Playgroud)
出了什么问题 - 是我的红宝石版本(ruby 1.9.3p484)......我真的不知道它会是什么.在localhost中一切都很好用.
我已将Puma添加到我的sinatra应用程序中,现在我在终端中获得两行输出请求.我已经检查过它实际上并没有两次调用代码,我猜测也许Puma正在输出请求信息以及Sinatra.
作为演示,我创建了一个简单的应用程序如下:
的Gemfile
source 'https://rubygems.org'
ruby '2.2.0'
gem 'sinatra'
gem 'puma'
Run Code Online (Sandbox Code Playgroud)
config.ru
require 'sinatra'
get '/' do
'Hello World'
end
run Sinatra::Application
Run Code Online (Sandbox Code Playgroud)
这是我运行的命令:
rackup -s puma
Run Code Online (Sandbox Code Playgroud)
这是我浏览http:// localhost:9292 /时收到的输出类型
R5001755:test louis.sayers$ rackup -s puma
Puma 2.11.3 starting...
* Min threads: 0, max threads: 16
* Environment: development
* Listening on tcp://localhost:9292
::1 - - [03/Jul/2015:21:46:37 +1000] "GET / HTTP/1.1" 200 11 0.0074
::1 - - [03/Jul/2015:21:46:37 +1000] "GET / HTTP/1.1" 200 11 0.0222
Run Code Online (Sandbox Code Playgroud)
关于发生了什么的任何想法?谢谢你的帮助!