如果您希望在应用中添加电子商务功能,哪些支付网关库可以与Sinatra配合使用?
我正在制作一个超小的Sinatra博客应用程序,我如何从数据库中获取条目,格式化它们,并将它们插入到我的布局中?
我有这样的事情:
post "/login" do
end
get "/login" do
end
post "/register" do
...
redirect "/login" # I would like to redirect to get "/login" instead of post "login"
end
Run Code Online (Sandbox Code Playgroud)
我可以告诉sinatra我想使用get,而不是隐含地选择"post"吗?
我正在编写一个gem,其中包含一个开发人员可以扩展的Sinatra应用程序.例如:
# gem code:
require 'sinatra'
module Mygem
class Application < Sinatra::Base
get 'auth/login' {}
get 'auth/logout {}
end
end
# developer code:
require 'mygem'
class DeveloperApp < Mygem::Application
# ..
end
Run Code Online (Sandbox Code Playgroud)
我也开始使用RSpec了.我应该如何配置RSpec来测试此功能?
我有一个模块化的Sinatra应用程序.我在配置块中设置了一些自定义变量,并希望在我的模型中访问这些设置.
问题是,NoMethodError当我尝试访问我的自定义设置时,我得到了一个MyModel.标准设置似乎仍然可以正常工作.我怎样才能做到这一点?
# app.rb
require_relative 'models/document'
class App < Sinatra::Base
configure do
set :resource_path, '/xfiles/i_want_to_believe'
end
get '/' do
@model = MyModel.new
haml :index
end
end
# models/my_model.rb
class MyModel
def initialize
do_it
end
def do_it
...
settings.resource_path # no method error
...
settings.root # works fine
end
end
Run Code Online (Sandbox Code Playgroud) 这是我在机架应用程序中的内容
#rb file
require 'pry'
class .....
#GemFile
group :development do
gem "pry"
gem "pry-nav"
end
Run Code Online (Sandbox Code Playgroud)
当然,在生产中它会导致错误.怎么做一个"要求"?
例:
require 'sinatra'
get '/somekey' do
headers('Content-Type' => "image/jpeg")
["http://upload.wikimedia.org/wikipedia/commons/2/23/Lake_mapourika_NZ.jpeg", "http://img.brothersoft.com/screenshots/softimage/j/jpeg_converter-4567-1.jpeg"].sample
end
Run Code Online (Sandbox Code Playgroud)
我想回复一个未托管在我的服务器上的图像.
我怎么能得到这个?
注意:图像的链接不是秘密的(因为它托管在S3上).它是为一个生成identicons的网站.
结帐http://identico.in/[insert_any_key_here].原因是我希望服务器进行查找,如果图像已存在于S3上,则使用该图像,如果不存在,则生成一个然后将其上载到s3.
注意:如果我这样做:
require "open-uri"
open ["http://upload.wikimedia.org/wikipedia/commons/2/23/Lake_mapourika_NZ.jpeg", "http://img.brothersoft.com/screenshots/softimage/j/jpeg_converter-4567-1.jpeg"].sample
Run Code Online (Sandbox Code Playgroud)
然后它工作,但是,我觉得这可能会慢很多,因为我的服务器首先必须下载图像并打开它,然后用户必须从我的服务器下载图像.
出于安全原因,我不希望Sinatra打印标准输出中所请求的每个URL,我尝试使用本回答中的set :logging, false建议使用:
class SweetAppName< Sinatra::Base
set :show_exceptions, false
set :environment, :production
set :logging, false
Run Code Online (Sandbox Code Playgroud)
但是,当我使用rackup和thin运行应用程序时,我仍然看到请求记录到终端:
127.0.0.1 - - [26/May/2015:09:32:34 -0700]"GET/not-a-real-url HTTP/1.0"404 - 0.0452
我该如何关闭它们?
我不确定如何正确将4567Docker 的Sinatra端口正确地公开回主机。在本地运行该应用程序没有问题。
以下存储库显示了问题的情况https://gitlab.com/davidhooey/sinatra-docker
通过搜索,我注意到以下问题:在Docker容器中运行Ruby Sinatra无法连接(通过Mac主机)或无法找到命令(在不同情况下)?将--host 0.0.0.0传递到rackup命令中。但是,我正在使用编程方式启动该网站Site.run!。
文件树
.
??? Dockerfile
??? Gemfile
??? Gemfile.lock
??? README.md
??? app.rb
??? docker-compose.yml
??? site.rb
??? views
??? index.erb
Run Code Online (Sandbox Code Playgroud)
app.rb
module App
class App
def initialize(args)
# Do some stuff before launching site.
# Launch site
Site.run!
end
end
end
App::App.new(ARGV)
Run Code Online (Sandbox Code Playgroud)
在site.rb该:bind西纳特拉设置为0.0.0.0。
site.rb
require 'sinatra'
module App
class Site < Sinatra::Base
set :bind, '0.0.0.0'
set :static, …Run Code Online (Sandbox Code Playgroud)