标签: sinatra

Heroku app无法启动 - "require":没有要加载的文件 - sinatratestapp(LoadError)

我正在尝试使用bamboo-mri-1.9.2堆栈运行我的Heroku应用程序.当然它在Ruby 1.9.2上运行良好.但是在生产时它会在执行启动时崩溃config.ru,如下所示:

require 'sinatratestapp'
run Sinatra::Application
Run Code Online (Sandbox Code Playgroud)

我的.gems档案:

sinatra --version '>= 1.0'
Run Code Online (Sandbox Code Playgroud)

而应用程序本身如下sinatratestapp.rb:

require 'rubygems'
require 'sinatra'

get '/' do
  "Hello from Sinatra on Heroku!"
end
Run Code Online (Sandbox Code Playgroud)

这就是我在项目中的所有内容并尝试在Heroku上运行结果:

<internal:lib/rubygems/custom_require>:29:in `require': no such file to load -- sinatratestapp (LoadError)
        from <internal:lib/rubygems/custom_require>:29:in `require'
        from config.ru:1:in `block (3 levels) in <main>'
        ...
-----> Your application is requiring a file that it can't find.

       Most often this is due to missing gems, or it could be that you …
Run Code Online (Sandbox Code Playgroud)

ruby heroku sinatra

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

类中的路由处理程序

我有一个Sinatra应用程序设置,其中大多数逻辑在各种类中执行,并且post/ getroutes实例化这些类并调用它们的方法.

我正在考虑将post/ getroute处理程序放在类本身内是否是一个更好的结构.

无论如何,我想知道是否有可能.例如:

class Example
  def say_hello
    "Hello"
  end

  get '/hello' do
    @message = say_hello
  end
end
Run Code Online (Sandbox Code Playgroud)

如果不修改上述内容,Sinatra会说对象say_hello上没有方法SinatraApplication.

ruby sinatra

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

使用bundle exec可以解决这个问题吗?

这是我的 Gemfile

source :rubygems

gem 'rake', '0.9.2.2'
gem 'sinatra'
gem 'activerecord', '3.0.9'
gem 'pg', '~> 0.12.2'
gem 'logger'
gem 'nokogiri'

group :development, :test do
  gem 'rack-test'
  gem 'ruby-debug19'
  gem 'sqlite3'
end
Run Code Online (Sandbox Code Playgroud)

rake console在其他项目中运行,现在我收到此消息:

You have already activated activesupport 3.1.3, but your Gemfile requires activesupport 3.0.9. Using bundle exec may solve this.

我如何使用`bundle exec来解决这个问题?这是什么意思?

ruby gem rubygems sinatra bundler

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

我怎样才能给Sinatra一个笼统的默认路线?

对于小型开发人员文档应用程序,我想设置一个Sinatra应用程序来提供HAML文件.在CSS文件和图像的路由之后,我想要一条尝试为您请求的任何路径加载HAML文件的路由.

例如:

  • /index加载views/index.haml,如果存在的话
  • /this/page/might/exist加载views/this/page/might/exist.haml,如果存在的话

我该如何指定这条路线?

ruby sinatra

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

Sinatra请求["SOME_HEADER"]不适用于POST; doc bug?

Sinatra自述文件:

request["SOME_HEADER"]      # value of SOME_HEADER header
Run Code Online (Sandbox Code Playgroud)

鉴于此应用程序:

require 'sinatra'

post '/env' do
    env['HTTP_X_FOO']
end

post '/request' do 
    request['X-Foo']
end

post '/request_rack_http_format' do
    request['HTTP_X_FOO']
end
Run Code Online (Sandbox Code Playgroud)

第一个规范通过; 接下来的两个失败:

describe "Sinatra should place the header in" do
    before(:all) do
        header 'X-Foo', 'Bar'
    end

    example "env" do
        post '/env'
        last_response.body.should == 'Bar' #pass
    end

    example "request[]" do
        post '/request'
        last_response.body.should == 'Bar' #fail; got ""
    end

    example "request[] (rack format)" do
        post '/request_rack_http_format'
        last_response.body.should == 'Bar' #fail; got ""
    end
end …
Run Code Online (Sandbox Code Playgroud)

ruby rack sinatra

12
推荐指数
2
解决办法
5349
查看次数

在ruby/ActiveRecord中生成类似Instagram或Youtube的不可语句字符串ID

在创建给定的ActiveRecord模型对象的实例时,我需要生成一个短的(6-8个字符)唯一字符串,用作URL中的标识符,采用Instagram的照片URL样式(如http://instagram.com/ p/P541i4ErdL /,我刚刚加入404)或Youtube的视频网址(如http://www.youtube.com/watch?v=oHg5SJYRHA0).

这样做的最佳方法是什么?最简单的方法是重复创建一个随机字符串,直到它是唯一的?有没有办法散列/随机播放整数id,以便用户不能通过更改一个字符来破解URL(就像我上面的404'd Instagram链接那样)并最终获得新记录?

ruby postgresql activerecord sinatra

12
推荐指数
2
解决办法
4688
查看次数

在Heroku上没有使用Sinatra/Thin检测到HTTP流连接(SSE)客户端断开连接

我正在尝试在Cedar堆栈上部署Sinatra流式SSE响应应用程序.不幸的是,虽然它在开发中完美运行,但是一旦部署到Heroku,callback或者errback在调用连接时永远不会被调用,导致连接池被填满过时的连接(永远不会超时,因为数据仍在服务器上发送给他们侧.)

来自Heroku文档的Relvant信息:

长轮询和流媒体响应

Cedar支持HTTP 1.1功能,例如长轮询和流式响应.应用程序有一个初始的30秒窗口,以单个字节响应客户端.但是,此后发送的每个字节(从客户端接收或由您的应用程序发送)重置滚动55秒窗口.如果在55秒窗口期间没有发送数据,则终止连接.

如果您要发送流响应,例如服务器发送的事件,则需要检测客户端何时挂断,并确保您的应用服务器立即关闭连接.如果服务器保持连接打开55秒而不发送任何数据,您将看到请求超时.

这正是我想要做的 - 检测客户端何时挂断,并立即关闭连接.然而,关于Heroku路由层的一些东西似乎阻止Sinatra像通常那样检测流关闭事件.

一些示例代码可用于复制此代码:

require 'sinatra/base'

class MyApp < Sinatra::Base

  set :path, '/tmp'
  set :environment, 'production'

  def initialize
    @connections = []

    EM::next_tick do
      EM::add_periodic_timer(1) do
        @connections.each do |out|
          out << "connections: " << @connections.count << "\n"
        end
        puts "*** connections: #{@connections.count}"
      end
    end

  end

  get '/' do
    stream(:keep_open) do |out|
      @connections << out
      puts "Stream opened from #{request.ip} (now #{@connections.size} open)"

      out.callback do
        @connections.delete(out)
        puts "Stream closed from #{request.ip} (now …
Run Code Online (Sandbox Code Playgroud)

ruby heroku thin sinatra http-streaming

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

Sinatra的未定义方法`desc':: Application:Class

这是我运行任何rake命令时得到的错误:undefined method 'desc' for Sinatra::Application:Class

# app.rb
require 'sinatra'
require 'sinatra/activerecord'
require 'sinatra/contrib'

get '/' do
  puts "Hello World"
end

# config.ru
require "./app"
run Sinatra::Application

# Rakefile
require './app'
require 'sinatra/activerecord/rake'

# Gemfile
source 'https://rubygems.org'
ruby '2.0.0'

gem 'activerecord', '~> 4.0.2'
gem 'sinatra', '~> 1.4.4'
gem 'sinatra-activerecord', '~> 1.2.3'
gem 'sinatra-contrib', '~> 1.4.2'
Run Code Online (Sandbox Code Playgroud)

完整跟踪:

/Users/j/.rvm/gems/ruby-2.0.0-p247/gems/sinatra-contrib-1.4.2/lib/sinatra/namespace.rb:269:in `method_missing'
/Users/j/.rvm/gems/ruby-2.0.0-p247/gems/sinatra-activerecord-1.2.3/lib/sinatra/activerecord/tasks.rake:4:in `block in <top (required)>'
/Users/j/.rvm/gems/ruby-2.0.0-p247/gems/sinatra-contrib-1.4.2/lib/sinatra/namespace.rb:126:in `class_eval'
/Users/j/.rvm/gems/ruby-2.0.0-p247/gems/sinatra-contrib-1.4.2/lib/sinatra/namespace.rb:126:in `block in new'
/Users/j/.rvm/gems/ruby-2.0.0-p247/gems/sinatra-contrib-1.4.2/lib/sinatra/namespace.rb:118:in `initialize'
/Users/j/.rvm/gems/ruby-2.0.0-p247/gems/sinatra-contrib-1.4.2/lib/sinatra/namespace.rb:118:in `new'
/Users/j/.rvm/gems/ruby-2.0.0-p247/gems/sinatra-contrib-1.4.2/lib/sinatra/namespace.rb:118:in `new'
/Users/j/.rvm/gems/ruby-2.0.0-p247/gems/sinatra-contrib-1.4.2/lib/sinatra/namespace.rb:142:in `namespace'
/Users/j/.rvm/gems/ruby-2.0.0-p247/gems/sinatra-1.4.4/lib/sinatra/base.rb:1972:in …
Run Code Online (Sandbox Code Playgroud)

ruby rake sinatra

12
推荐指数
2
解决办法
3781
查看次数

分段错误ruby 2.0.0p645

当我在Sinatra/ruby​​应用程序中使用ALLIANCE FEED时,我得到了一个

/opt/rh/ruby200/root/usr/share/ruby/net/http/response.rb:368:[BUG]分段错误ruby 2.0.0p645(2015-04-13)[x86_64-linux]

错误.所以我想知道这是一个ruby的错误或代码的错误,我可以做什么步骤来修复它.

链接到错误

以下是PARSING ALLIANCE FEED的代码

        feeds.each { |name, hash|
            puts "=== PARSING #{name.upcase} FEED ==="
            start = Time.now
            open(hash[:url]) { |feed|
                send(hash[:action], feed)
            }
            duration = Time.now - start
            puts "Feed syndication completed in #{duration.to_s} seconds."
            puts
        }

        # Close DB connection
        puts "Disconnecting"
        @db.disconnect
    end

    def parseAllianceData(xml)
        start = Time.now
        allianceData = XMLObject.new xml
        duration = Time.now - start

        puts "XML parsed in #{duration.to_s} seconds."
        puts "Alliances found: #{allianceData.alliances.count}"

        @db[:feeds].insert(
            :generated_at => allianceData.server.datagenerationdatetime,
            :type => …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails sinatra

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

在ActiveRecord 5中替换ActiveRecord :: ConnectionAdapters :: ConnectionManagement

我们正在将一个Sinatra应用程序从ActiveRecord 4升级到ActiveRecord 5.之前我们有这一行:

use ActiveRecord::ConnectionAdapters::ConnectionManagement

这是因为在请求完成后没有清理连接.以下是关于此主题的SO讨论:

从ActiveRecord 5开始,此行不再有效.rails项目中的这个对话说明:

删除它有利于Executor和Reloader API.被删除的中间件不是公共API的一部分.如果你想在Rails之外使用它,你需要制作一个.

这是否意味着,如果有人要将ActiveRecord 5与Sinatra一起使用,除非开发人员重新创建现已删除的中间件,否则连接将在请求后再次"泄露"或未返回到池中?

在Sinatra示例中,现在是否需要在ActiveRecord 5中包含此行?

after do
  ActiveRecord::Base.clear_active_connections!
end
Run Code Online (Sandbox Code Playgroud)

这就是链接线程的含义,但我希望得到一个明确的答案,我可以回到我的开发团队.

ruby activerecord ruby-on-rails sinatra sinatra-activerecord

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