你能告诉我我的 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) 我有一个像这样的 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)
但这似乎不起作用,因为原始方法仍然被调用。关于如何做到这一点有什么想法吗?谢谢!
我正在尝试使用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没有太多经验,我只是错过了一些明显的东西吗?
我正在尝试在Sinatra中创建一个页面,以便您发布的任何内容(在参数名称"command"下)都会回显给您.这是我目前的做法:
post '/eval' do
"I got #{params[:data][:command]}."
end
Run Code Online (Sandbox Code Playgroud)
如果我尝试将任何内容发布到/ eval,则会导致内部服务器错误.我究竟做错了什么?
我正在尝试使用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流.有谁知道如何做到这一点?
我有一个简单的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工作,但/秘密不...
我在这里错过了什么吗?
我有这样的导航设置:
<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.
-----> 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 … 我正在编写一个简单的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,后者是抛出异常的那个.在这里完全回溯.
我试图检查一个条件,然后包括"停止服务器"和"启动服务器"锚标签.我收到了一个错误.
请告知要更改的内容.谢谢.
<%= condition ? "Running" <a href='/stop'> Stop Server </a> :"Stopped" <a href='/start'> Start Server</a> %> </td>
Run Code Online (Sandbox Code Playgroud) sinatra ×10
ruby ×8
amazon-s3 ×1
bundler ×1
cookies ×1
css ×1
docker ×1
eventmachine ×1
file-upload ×1
heroku ×1
http ×1
javascript ×1
jquery ×1
module ×1
mongodb ×1
post ×1
postdata ×1
ruby-mocha ×1
stub ×1