标签: sinatra

无法将请求发送到使用 docker 和 docker-compose 运行的 sinatra 应用程序

你能告诉我我的 Dockerfile 或 docker-compose 有什么问题吗?

# Dockerfile

FROM ruby:2.5.0

RUN apt-get update -qq && apt-get install -y build-essential

ENV APP_HOME /app
RUN mkdir $APP_HOME
WORKDIR $APP_HOME

ADD Gemfile* $APP_HOME/
RUN bundle install

ADD . $APP_HOME


# docker-compose.yml

version: '3'

services:
 db:
  image: mongo
  volumes:
    - $HOME/data/mongodb:/data/db
  ports:
    - "27017:27017"

web:
 build: .
 command: rackup config.ru --port 4567
 volumes:
   - .:/app
 ports:
   - "4567:4567"
 depends_on:
   - db
Run Code Online (Sandbox Code Playgroud)

如果我直接使用“rackup”命令运行应用程序,它效果很好。当我通过“docker-compose up”命令运行容器时,问题就开始了,它停止通过“localhost:4567”接受请求。我无法发现问题,这就是我寻求帮助的原因。

这是来自“docker-compose up”的日志,以防万一。

Starting tracker_db_1 ... done
Recreating tracker_api_1 ... done
Attaching to …
Run Code Online (Sandbox Code Playgroud)

ruby sinatra mongodb docker docker-compose

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

如何使用 Mocha 在控制器内存根模块方法

我有一个像这样的 Sinatra 应用程序:

my_module.rb

module MyModule
  def my_method
    "yay"
  end
end
Run Code Online (Sandbox Code Playgroud)

应用程序.rb

get "/my_module" do 
  puts my_method
end
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用和my_method进行测试。Minitestmocha

def test_my_method
  MyModule.stubs(:my_method).returns("stubbed")
  get "/my_module"
end
Run Code Online (Sandbox Code Playgroud)

但这似乎不起作用,因为原始方法仍然被调用。关于如何做到这一点有什么想法吗?谢谢!

ruby module stub sinatra ruby-mocha

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

在Sinatra中使用AWS :: S3列出存储桶

我正在尝试使用aws-s3 gem访问我的Amazon S3帐户,但无论我做什么,我甚至无法打印存储桶列表.

错误:

undefined method `bytesize' for #<AWS::S3::Bucket:0x1b9e488>
Run Code Online (Sandbox Code Playgroud)

来自代码:

# hello_world.rb
require 'rubygems'
require 'sinatra'
require 'aws/s3'

get '/' do
  connection = AWS::S3::Base.establish_connection!(
     :access_key_id     => '***',
     :secret_access_key => '***'
   )
  AWS::S3::Service.buckets
end
Run Code Online (Sandbox Code Playgroud)

我对Ruby没有太多经验,我只是错过了一些明显的东西吗?

ruby ruby-on-rails amazon-s3 sinatra amazon-web-services

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

在Sinatra处理POSTDATA

我正在尝试在Sinatra中创建一个页面,以便您发布的任何内容(在参数名称"command"下)都会回显给您.这是我目前的做法:

post '/eval' do
  "I got #{params[:data][:command]}."
end
Run Code Online (Sandbox Code Playgroud)

如果我尝试将任何内容发布到/ eval,则会导致内部服务器错误.我究竟做错了什么?

ruby post http postdata sinatra

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

一旦连接关闭,如何在Sinatra中停止后台线程

我正在尝试使用Sinatra的twitter流API,并在搜索关键字时为用户提供实时更新.

require 'sinatra'
require 'eventmachine'
require 'em-http'
require 'json'

STREAMING_URL = 'https://stream.twitter.com/1/statuses/sample.json'

get '/' do
  stream(:keep_open) do |out|
    http = EM::HttpRequest.new(STREAMING_URL).get :head => { 'Authorization' => [ 'USERNAME', 'PASS' ] }
    buffer = ""
    http.stream do |chunk|
      puts "still chugging"
      buffer += chunk
      while line = buffer.slice!(/.+\r?\n/)
        tweet = JSON.parse(line)
        unless tweet.length == 0 or tweet['user'].nil?
            out << "<p><b>#{tweet['user']['screen_name']}</b>: #{tweet['text']}</p>" 
        end
      end
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

我希望在用户关闭连接时停止处理em-http-request流.有谁知道如何做到这一点?

ruby sinatra eventmachine

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

Sinatra饼干在某些路线上消失了吗?

我有一个简单的Sinatra应用程序,我正在玩,由于某种原因,cookie似乎不适用于某些路线,我觉得很奇怪.

require "sinatra"

set(:authenticate) do |*vars|
    condition do
        unless request.cookies.has_key?("TestCookie")
            redirect to("/login"), 303 
        end
    end
end

get "/login" do
    return "No valid cookie"
end

get "/secret", :authenticate => [:auth_cookie] do
    cookie = request.cookies["TestCookie"]
    return "Secrets ahoy - #{cookie}"
end

get '/cookie/set' do
    response.set_cookie("TestCookie", {
        :expires => Time.now + 2400,
        :value => "TestValue"
    })
    return "Cookie is set"
end

get '/cookie/get' do
    cookie = request.cookies["TestCookie"]
    return "Cookie with value #{cookie}"
end
Run Code Online (Sandbox Code Playgroud)

如果我去cookie /设置它正确设置cookie(可以在firecookie中看到它),那么如果我去cookies /得到我得到正确的cookie输出.但是,如果我去/ secret它总是重定向到/ login.由于我仍然是Ruby语法的新手,我认为这可能是我的条件在authenticate扩展中的问题,所以我尝试删除它并像其他人一样吐出cookie.但仍然没有,所以我不知道为什么cookie在那里,我可以在浏览器中看到...和/ cookies/get工作,但/秘密不...

我在这里错过了什么吗?

ruby cookies sinatra

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

选择后,将类添加到导航项

我有这样的导航设置:

<ul class="nav nav-pills">
  <li><a href="/questions/all">All</a></li>
  <li><a href="/questions/popular">Popular</a></li>
  <li><a href="/questions/fun">Fun</a></li>
</ul>
Run Code Online (Sandbox Code Playgroud)

单击其中一个时,它会映射到我的Sinatra路径(即get '/questions/:filter' do...).单击其中任何一个都会更新页面,但它们仍然使用相同的.erb视图.

我正在试图弄清楚如何将类" active"应用于<li>当前正在查看的导航项目.这样,导航项将突出显示,以便用户知道他们所在的视图(无需查看实际的URL).

任何帮助将非常感激.如果需要,我可以访问jQuery.

javascript css jquery sinatra

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

Heroku推了拒绝

-----> Ruby/Rack app detected
-----> Using Ruby version: ruby-1.9.3
-----> Installing dependencies using Bundler version 1.3.0.pre.2
       Running: bundle install --without development:test --path vendor/bundle --binstubs bin/
       Fetching gem metadata from http://rubygems.org/.........
       Fetching gem metadata from http://rubygems.org/..
^[[C^[[D^[[D/app/slug-compiler/lib/utils.rb:66:in `block (2 levels) in spawn': command='/app/slug-compiler/lib/../../tmp/buildpacks/ruby/bin/compile /tmp/build_22uiq5k0q45sp /app/tmp/repo.git/.cache' exit_status=0 out='' at=timeout elapsed=900.1076555252075 (Utils::TimeoutError)
    from /app/slug-compiler/lib/utils.rb:52:in `loop'
    from /app/slug-compiler/lib/utils.rb:52:in `block in spawn'
    from /app/slug-compiler/lib/utils.rb:47:in `popen'
    from /app/slug-compiler/lib/utils.rb:47:in `spawn'
    from /app/slug-compiler/lib/buildpack.rb:37:in `block in compile'
    from /app/slug-compiler/lib/buildpack.rb:35:in `fork'
    from /app/slug-compiler/lib/buildpack.rb:35:in `compile'
    from /app/slug-compiler/lib/slug.rb:497:in `block in run_buildpack'
    from …

heroku sinatra bundler

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

Sinatra上传多个文件

我正在编写一个简单的Sinatra应用程序,但是在读取文件时<input type="file" multiple />没有让Rack抛出一些问题NoMethodError: undefined method 'bytesize' for (Hash).

表单的写法如下:

<form action="/upload" enctype="multipart/form-data" method="post">
    <input type="file" name="images[]" multiple />
</form>
Run Code Online (Sandbox Code Playgroud)

但是,在我的任何代码执行之前,接收端会抛出上述错误,也就是说,Rack没有正确解析input[name=images].我发送的表格不正确吗?如果我放下括号[],那么只发送最后一个文件(很多),但我觉得我可能会遗漏一些东西......

只是为了澄清:这是Sinatra v1.4.3和Rack v1.5.2,后者是抛出异常的那个.在这里完全回溯.

ruby file-upload sinatra

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

erb中的Ruby三元运算符,带有html标记

我试图检查一个条件,然后包括"停止服务器"和"启动服务器"锚标签.我收到了一个错误.

请告知要更改的内容.谢谢.

<%= condition ? "Running" <a href='/stop'> Stop Server </a> :"Stopped" <a href='/start'> Start Server</a> %> </td>
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails ternary-operator sinatra

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