我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它工作正常..
根据 Heroku 的文档,我了解到部署 Sinatra 应用程序需要 Procfile。然而,即使没有它,我也能够将应用程序部署到 Heroku,没有任何问题。只是想了解在什么情况下是绝对需要的。
好吧,我决定确保在构建 api 之前我可以让这个 ssl 东西正常工作..我感觉已经完成了 95%。
\n\n所以,我有来自 namecheap 的证书和密钥。那里一切都应该很好。
\n\n这是我的 app.rb
\n\nrequire \'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\nRun Code Online (Sandbox Code Playgroud)\n\n我运行程序
\n\nsudo ruby app.rb\nRun Code Online (Sandbox Code Playgroud)\n\n有趣的是,在 …
我使用 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)
如何让它绑定到正确的端口?
我目前正在尝试运行 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) 我正在使用DataMapper和Sinatra构建一个小型Ruby应用程序,我正在尝试定义一个基本的博客模型:
由于每个评论belongs_to帖子的事实,我很难在评论之间找到自我参照关系.我的课程现在看起来像这样:
class User
include DataMapper::Resource
property :id, Serial
property :username, String
property :password, String
has n, :post
endRun Code Online (Sandbox Code Playgroud)
class Post
include DataMapper::Resource
property :id, Serial
property :content, Text
belongs_to :user
has n, :comment
endRun Code Online (Sandbox Code Playgroud)
class Comment
include DataMapper::Resource
property :id, Serial
property :content, Text
belongs_to :user
belongs_to :post
endRun Code Online (Sandbox Code Playgroud)
我正在关注协会的指南并构建一个新对象(CommentConnection)以将两个注释链接在一起,但我的问题是每个子注释不应属于Comment类隐含的Post.
我的第一直觉是为Comments提取一个超类,这样一个子类可以是"顶级"并属于一个帖子,而另一种类型的注释属于另一个注释.不幸的是,当我这样做时,我遇到的问题是注释ID变为空.
在DataMapper中建模这种递归注释关系的最佳方法是什么?
请考虑以下简单代码:
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.
我正在尝试在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停止执行并在确认页面上返回错误消息.我该怎么做呢?
我需要设置在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)