标签: sinatra

如何让 Puma 在每次 .rb 发生变化时重新加载?

thin之前在我的sinatra应用程序中使用过,并rerun在 .rb 发生更改时自动重新加载服务器

rerun --pattern="**/*.{rb}" ruby ./main_service.rb
Run Code Online (Sandbox Code Playgroud)

如何做puma同样的事情?因为这个命令不起作用:

rerun --pattern="**/*.{rb}" puma -b tcp://127.0.0.1:12345
Run Code Online (Sandbox Code Playgroud)

这表明:

ERROR: No application configured, nothing to run
Run Code Online (Sandbox Code Playgroud)

我的config.ru

require './main_service'
run Sinatra::Application
Run Code Online (Sandbox Code Playgroud)

但是当我使用手动命令时puma -b tcp://127.0.0.1:12345它工作正常..

ruby reload sinatra

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

我是否需要 Procfile 将 Sinatra 应用程序推送到 Heroku?

根据 Heroku 的文档,我了解到部署 Sinatra 应用程序需要 Procfile。然而,即使没有它,我也能够将应用程序部署到 Heroku,没有任何问题。只是想了解在什么情况下是绝对需要的。

ruby sinatra procfile

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

为什么我的 Sinatra 应用程序无法使用 SSL?

好吧,我决定确保在构建 api 之前我可以让这个 ssl 东西正常工作..我感觉已经完成了 95%。

\n\n

所以,我有来自 namecheap 的证书和密钥。那里一切都应该很好。

\n\n

这是我的 app.rb

\n\n
require \'sinatra/base\'\nrequire \'webrick\'\nrequire \'webrick/https\'\nrequire \'openssl\'\n\nclass MyServer  < Sinatra::Base\n  set :bind, \'0.0.0.0\'\n\n  get \'/\' do\n    "Hello, world!\\n"\n  end\nend\n\nCERT_PATH = \'./ssl\'\n\nwebrick_options = {\n    :Port               => 443,\n    :Logger             => WEBrick::Log::new($stderr, WEBrick::Log::DEBUG),\n    :DocumentRoot       => "/ruby/htdocs",\n    :SSLEnable          => true,\n    :SSLVerifyClient    => OpenSSL::SSL::VERIFY_NONE,\n    :SSLCertificate     => OpenSSL::X509::Certificate.new(  File.open(File.join(CERT_PATH, "server.crt")).read),\n    :SSLPrivateKey      => OpenSSL::PKey::RSA.new(          File.open(File.join(CERT_PATH, "server.key")).read),\n    :SSLCertName        => [ [ "CN",WEBrick::Utils::getservername ] ],\n    :app                => MyServer\n}\nRack::Server.start webrick_options\n
Run Code Online (Sandbox Code Playgroud)\n\n

我运行程序

\n\n
sudo ruby app.rb\n
Run Code Online (Sandbox Code Playgroud)\n\n

有趣的是,在 …

ruby ssl amazon-ec2 sinatra amazon-web-services

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

Sinatra 未绑定到正确的端口

我使用 Openshift 和 Sinatra 来托管我的网站。但它没有绑定到正确的端口。

set :port, ENV["OPENSHIFT_RUBY_PORT"]
set :port, ENV["OPENSHIFT_RUBY_IP"]
...
puts ENV["OPENSHIFT_RUBY_PORT"]
puts settings.port
puts ENV["OPENSHIFT_RUBY_IP"]
puts settings.bind
Run Code Online (Sandbox Code Playgroud)

这将返回正确的输出。但是当服务器真正启动时...

Listening on localhost:9292, CTRL+C to stop
Run Code Online (Sandbox Code Playgroud)

错误:

no acceptor (port is in use or requires root privileges) (RuntimeError) 
Run Code Online (Sandbox Code Playgroud)

如何让它绑定到正确的端口?

port sinatra openshift

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

如何知道linux上安装了哪个版本的sinatra?

我在终端上,我不知道如何检查我的系统上安装的 sinatra 版本。

linux sinatra

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

错误:在任何源中都找不到 sqlite3-1.4.0

我目前正在尝试运行 run.rb 文件,但我不断收到 sqlite3 的错误。当我输入 时bundle install,我收到此成功消息:

Fetching gem metadata from https://rubygems.org/.........
Resolving dependencies...
Using rake 12.3.2
Using concurrent-ruby 1.1.4
Using i18n 1.5.3
Using minitest 5.11.3
Using thread_safe 0.3.6
Using tzinfo 1.2.5
Using activesupport 5.2.2
Using activemodel 5.2.2
Using arel 9.0.0
Using activerecord 5.2.2
Using bundler 2.0.1
Using coderay 1.1.2
Using equatable 0.5.0
Using method_source 0.9.2
Using mustermann 1.0.3
Using necromancer 0.4.0
Using tty-color 0.4.3
Using pastel 0.7.2
Using pry 0.12.2
Using rack 2.0.6
Using rack-protection 2.0.5
Using …
Run Code Online (Sandbox Code Playgroud)

ruby sqlite rubygems sinatra bundler

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

DataMapper子类化和多对多自引用关系

我正在使用DataMapper和Sinatra构建一个小型Ruby应用程序,我正在尝试定义一个基本的博客模型:

  • 该博客有多个用户
  • 我有一组帖子,每个帖子都由用户发布
  • 每个帖子都有一组评论
  • 每个评论都可以有自己的评论集 - 这可以重复几个层次

由于每个评论belongs_to帖子的事实,我很难在评论之间找到自我参照关系.我的课程现在看起来像这样:

class User
  include DataMapper::Resource
  property :id, Serial
  property :username, String
  property :password, String

  has n, :post
end
Run Code Online (Sandbox Code Playgroud)
class Post
  include DataMapper::Resource
  property :id, Serial
  property :content, Text

  belongs_to :user

  has n, :comment
end
Run Code Online (Sandbox Code Playgroud)
class Comment
  include DataMapper::Resource
  property :id, Serial
  property :content, Text

  belongs_to :user
  belongs_to :post
end
Run Code Online (Sandbox Code Playgroud)

我正在关注协会的指南并构建一个新对象(CommentConnection)以将两个注释链接在一起,但我的问题是每个子注释不应属于Comment类隐含的Post.

我的第一直觉是为Comments提取一个超类,这样一个子类可以是"顶级"并属于一个帖子,而另一种类型的注释属于另一个注释.不幸的是,当我这样做时,我遇到的问题是注释ID变为空.

在DataMapper中建模这种递归注释关系的最佳方法是什么?

ruby recursion datamapper sinatra

0
推荐指数
1
解决办法
899
查看次数

修改Sinatra中预定义的'params'变量使其无效

请考虑以下简单代码:

post '/xxx' do
    puts params
end
Run Code Online (Sandbox Code Playgroud)

这很好用.现在考虑以下修改

post '/xxx' do
    params = params
    puts params
end
Run Code Online (Sandbox Code Playgroud)

现在params是零!! 我是Ruby的新手,并且不知道为什么会出现这种情况.显然我不想执行无用的params = params表达式,但我试图做一些更复杂的事情,包括修改params并发现它总是变成nil.

ruby sinatra

0
推荐指数
1
解决办法
363
查看次数

如何在Sinatra API中优雅地处理异常

我正在尝试在Sinatra中编写一个API,它接受一个临时的CSV文件作为参数.如果文件类型不是text/csv或csv没有电子邮件列,我想引发异常,我希望确认页面只显示错误消息.我想它看起来像这样:

if params[:recipients_file]
  raise ArgumentError, 'Invalid file. Make sure it is of type text/csv.' unless params[:recipients_file][:type] == "text/csv"
  recipients_csv = CSV.parse(params[:recipients_file][:tempfile].read, {headers: true})
  raise ArgumentError, 'Invalid CSV. Make sure it has an "email" column' unless recipients_csv.headers.include?('email')
  recipients += recipients_csv.map {|recipient| recipient["email"]}
end
Run Code Online (Sandbox Code Playgroud)

但是,任何时候不满足其中一个条件,我会得到非常丑陋的错误消息,如NoMethodErrors等.我只是希望API停止执行并在确认页面上返回错误消息.我该怎么做呢?

ruby api exception-handling exception sinatra

0
推荐指数
1
解决办法
649
查看次数

NameError-未初始化的常量Twilio :: TwiML :: Response(可能来自旧的API代码?)

我需要设置在Sinatra上运行的Twilio SMS Broadcast App的帮助。它们基于本教程构建:使用Ruby发送大量SMS广播

当我进行HTTP POST时,运行Sinatra&Ngrok时,会在终端中收到此消息。

NameError - uninitialized constant Twilio::TwiML::Response
Did you mean?  Twilio::Response:
    broadcast.rb:75:in `send_to_me'
    broadcast.rb:53:in `block in <main>'
Run Code Online (Sandbox Code Playgroud)

它有问题的代码是:

def send_to_contacts(body, media_url = nil)
  response = Twilio::TwiML::Response.new do |r|
    contacts_numbers.each do |num|
      r.Message to: num do |msg|
        msg.Body body
        msg.Media media_url unless media_url.nil?
      end
    end
  end
  response.text
end

def send_to_me(from, body, media_url = nil)
  name = contact_name(from)
  body = "#{name} (#{from}):\n#{body}"
  response = Twilio::TwiML::Response.new do |r|
    r.Message to: MY_NUMBER do |msg|
      msg.Body body
      msg.Media media_url unless …
Run Code Online (Sandbox Code Playgroud)

ruby sinatra twilio ngrok

0
推荐指数
1
解决办法
438
查看次数