标签: sinatra

如何将公共API添加到Rails应用程序?

我想打开我的Rails 2.3应用程序(在Heroku上托管)给开发人员.我想到了两种方法:

  1. 使用respond_to |格式| 应用程序,以及只允许授权开发人员API密钥的before_filter
  2. 使用专用于API的第二个Heroku帐户,共享原始应用程序的数据库.现在,更好的是:Rails,Sinatra还是Grape

我知道这是一个模糊的问题.你有什么好的文章或建筑模式可以帮助我吗?

谢谢,

凯文

ruby api ruby-on-rails sinatra grape-api

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

Sinatra测试总是404'

我有一个非常简单的Sinatra应用程序,我在测试时遇到了问题.

基本上,当我从浏览器中的测试中知道请求正常工作时,每个请求测试都会返回404.关于问题可能是什么的任何想法?

test_helper.rb中:

ENV["RACK_ENV"] = 'test'

$: << File.expand_path(File.dirname(__FILE__) + '/../lib')
require 'app'
Sinatra::Synchrony.patch_tests!

class Test::Unit::TestCase
  include Rack::Test::Methods
end
Run Code Online (Sandbox Code Playgroud)

app_test.rb

require 'test_helper'
class AppTest < Test::Unit::TestCase 
  def app
    @app ||= Sinatra::Application
  end
  def test_it_says_hello
    get "/"
    assert_equal 200,  last_response.status
  end
end
Run Code Online (Sandbox Code Playgroud)

app.rb

$: << 'config'
require "rubygems" require "bundler"

ENV["RACK_ENV"] ||= "development" 
Bundler.require(:default, ENV["RACK_ENV"].to_sym) 
require ENV["RACK_ENV"]

class App < Sinatra::Base   register Sinatra::Synchrony
  get '/' do
    status 200
    'hello, I\'m bat shit crazy and ready to rock'   
  end
end
Run Code Online (Sandbox Code Playgroud)

的Gemfile

source …
Run Code Online (Sandbox Code Playgroud)

ruby testing rack sinatra

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

如何知道救援的例外情况?

在Ruby中使用特定的代码库时,我经常发现自己不知道要解救什么异常.

例如,我经常使用HTTParty来处理我的rails/sinatra app会发出的任何HTTP请求.我挖掘了HTTParty的代码,发现了一个包含已定义的异常的文件.大!我会在提出请求时拯救他们.

为了测试它,我为请求输入了一个虚假的域名,但我没有预期的HTTParty :: ResponseError异常,而是得到了一个SocketError异常.

处理这个问题的最佳方法是什么?我知道HTTParty是Ruby实现的包装器,这可能是抛出SocketError异常的原因.但我怎么知道呢?

我可以通过拯救"异常"来解决这个问题,但这是非常糟糕的做法.我宁愿清楚我可能造成的异常并处理这些异常.

编辑:我应该澄清,真正促使我创建这个问题的是我不知道如何能够找出在调用特定函数时可能引发的异常...也就是说,无需查看每个函数调用在堆栈中.

ruby ruby-on-rails sinatra

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

使用Sinatra 1.3发送二进制流

我正在构建一个Sinatra应用程序,该应用程序需要将文件发送给刚从其他位置下载的用户(实际上是代理)。

尽管我可以完成大部分工作,但我无法让Sinatra发送代码中指定的正确文件名。我使用的代码是:

get '/' do
  attachment file.name
  headers['Content-Type'] = file.content_type
  headers['Content-Disposition'] = 'attachment'
  file.body
end
Run Code Online (Sandbox Code Playgroud)

file.body是文件的内容)

如何让Sinatra使用所需的文件名?

ruby sinatra

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

如何在erb模板中呈现数组数组的最佳方法?

我有一个阵列 [["Company Name", "Field6"], ["Email", "Field5"]]

从该数组我创建具有值的字段数组:

[
  [{:label=>"Company Name", :value=>"gfdgfd"}],
  [{:label=>"Email", :value=>"gfdgfd@gfd.pl"}]
]
Run Code Online (Sandbox Code Playgroud)

运用

fields = [["Company Name", "Field6"], ["Email", "Field5"]]
# first element in array is Label and second is param id
fields_with_values = fields.collect do |field| 
 [
   label: field[0],
   value: params[field[1]]
 ]
end
Run Code Online (Sandbox Code Playgroud)

然后我想将标签和值传递给erb模板(类似):

# template.erb
<% fields_with_values.each do |field| %>
  l: <%= field.label %>
  v: <%= field.value %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

如何收集这些fields_with_values的最佳方式?也许我应该使用Object.new

ruby ruby-on-rails erb object sinatra

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

Sinatra,MySQL和ActiveRecord

如何设置一个简单的sinatra应用程序来使用MySQL和ActiveRecord?我找到了一些解决方案,但它们都没有工作(可能它们已经过时)了:

http://ericfarkas.com/posts/sinatra-activerecord-and-mysql/

http://labs.thredup.com/setting-up-sinatra-with-mysql-and-activerecor

那么使用Sinatra以及MySQL和ActiveRecord的最佳实践方法是什么?该https://github.com/janko-m/sinatra-activerecord宝石仅供sqlite3的,据我所看到的.

我不确定我是需要模型还是只需要简单的SQL查询.但让它一起工作对我有很大的帮助.

mysql activerecord sinatra

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

Sinatra薄,多线程不起作用

我在我的Sinatra应用程序上做了一个简单的测试,当我调用long处理程序时,虚拟请求被阻止.

 get '/test/long' do
    sleep 10
    "finished"
 end 

 get '/test/dummy' do
    "dummy"

 end
Run Code Online (Sandbox Code Playgroud)

我使用此命令启动了我的服务器:

bundle exec rackup -s thin
Run Code Online (Sandbox Code Playgroud)

根据Is Sinatra的多线程?,Thin应该是一个多线程Web服务器.那我的问题是什么?

my Gemfile:
source :rubyforge
gem 'sinatra',           '1.2.6', :require => 'sinatra/base'

gem 'geokit',        '1.6.0', :require => 'geokit'
gem 'json',              '1.5.3'
gem 'dm-core',           '1.2.0'
gem 'dm-timestamps',     '1.2.0'
gem 'dm-migrations',     '1.2.0'
gem 'dm-mysql-adapter',  '1.2.0'
gem 'rack-cache',        '1.0.1', :require => 'rack/cache'
gem 'rake',              '10.0.0',  :require => nil
gem 'hashie',            '1.0.0'
gem 'thin'
gem 'shotgun'
gem 'rack-mobile-detect', '0.3.0', :require => 'rack/mobile-detect'
gem …
Run Code Online (Sandbox Code Playgroud)

ruby multithreading thin sinatra

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

Sinatra +虾的例子?

我在这里很黑暗.我该怎么做才能让这件事开始?

这是我找到的最接近解决方案的东西,但它对我不起作用. Sinatra:找不到模板引擎:大虾

编辑:我现在处于非常早期阶段.我真的想尝试在Prawn中创建一个hello world,从那里我将添加我的内容.像这样的东西(app.rb):

require 'prawn'

get 'report/' do
content_type 'application/pdf'

pdf = Prawn::Document.new
pdf.text "Hello World"
pdf.render

end
Run Code Online (Sandbox Code Playgroud)

ruby prawn sinatra

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

在Gemfile中将git-repo传递给gem时,需要gem的问题

我过去没有这样做过,所以我可能会在这里遗漏一些东西.

我在本地更改了'ruby-git'的Gem文件,它运行正常.在我的Github回购中,我分叉了一个宝石并对它进行了相同的更改.

在构建Sinatra应用程序以将其推送到Heroku时,我更改了Gemfile如下:

gem 'git', :git => "git://github.com/silverSpoon/ruby-git.git"`  
Run Code Online (Sandbox Code Playgroud)

当我跑步时bundle install,我明白了

Fetching gem metadata from https://rubygems.org/.........
Resolving dependencies...
Using rugged 0.21.0
Using sinatra 1.4.5
Using git 1.2.8 from git://github.com/silverSpoon/ruby-git.git (at master)
Your bundle is complete!
Run Code Online (Sandbox Code Playgroud)
  • 但是,当我说? gem list git,它没有显示安装的宝石.
  • 当我运行时? bundle show git,它显示了安装gem repo的路径 -
    /Users/jatinganhotra/.rvm/gems/ruby-2.1.3@527website/bundler/gems/ruby-git-c7fb35af1a99
  • 当我运行我的应用程序,或运行irb并执行2.1.3 :001 > require 'git'
    它得到以下错误 -
    LoadError: cannot load such file -- git

我在这里想念傻事吗?

ruby gem github heroku sinatra

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

如何在Sinatra中访问*incoming*标题?

我正在向Sinatra应用程序发送请求:

curl -X POST --header "MyHeader: 123444" http://localhost:9292/test -d ""
Run Code Online (Sandbox Code Playgroud)

如何在路线中访问它?这些不起作用:

 headers["MyHeader"]
 request["MyHeader"]
 request.env["MyHeader"]
Run Code Online (Sandbox Code Playgroud)

他们都是零.

ruby sinatra

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