我正在使用Rack尝试在我的Sinatra应用程序中实现"记住我"功能.
我能够将会话cookie设置为在会话结束时或在X秒时间内到期,但我想同时执行这两项操作.
例如,如果用户点击了"记住我",那么我希望他们的会话在X秒后结束.例如,我的app.rb有一行如下所示:
use Rack::Session::Cookie, :expire_after => 2592000, #30 days in seconds
:secret => MY_SECRET
Run Code Online (Sandbox Code Playgroud)
当用户登录时,我尝试执行以下操作:
if (!remember_me)
env['rack.session.options'][:expire_after] = nil
end
Run Code Online (Sandbox Code Playgroud)
但是,这不会设置cookie值.
怎么设置这个?
如果ruby myapp.rb在localhost:4567开始sinatra预览,我怎么能以编程方式停止/停止/杀死它?终端命令(除了Ctrl-C)或Rake任务都没问题.
我需要将它合并到Rake任务或终端中.
我试图找出分析Sinatra应用程序的最佳方式是什么.我想要一个解决方案,它会给我一个路径中所有方法的时间配置文件,包括haml的渲染.
有没有人介绍过Sinatra应用程序?有什么指针吗?
Sinatra是否支持OPTIONS HTTP动词?就像是:
options '/' do
response.headers["Access-Control-Allow-Origin"] = "*"
response.headers["Access-Control-Allow-Methods"] = "POST"
halt 200
end
Run Code Online (Sandbox Code Playgroud) 我正在尝试将Sass文件链接到Sinatra应用程序.我有一个public/sass/styles.scss文件,我想在我的views/layout.haml文件中链接它.我可以使用以下链接链接常规css文件layout.haml:%link(rel="stylesheet" href="styles.css").但是,当我尝试链接到我的时sass/styles.scss,它不起作用.有人可以告诉我如何在Sinatra应用程序中链接Sass css文件吗?谢谢!
我有一个在nginx中运行的Sinatra应用程序(使用thin作为后代理),我redirect '/<path>'在Sinatra中使用语句.但是,当我在https下访问该站点时,这些重定向将发送给我http://localhost/<path>而不是https://localhost/<path>他们应该这样做.
目前,nginx的将控制传递到薄用这个命令,其中是proxy_pass http://thin_clusterthin_cluster
upstream thin_cluster { server unix:/tmp/thin.cct.0.sock; }
Run Code Online (Sandbox Code Playgroud)
我怎样才能解决这个问题?
我有一个sinatra应用程序,其中我有一个yml文件来设置环境变量,我用这个方法调用它们
module MyConfig
def config
environment = ENV["RACK_ENV"] || "development"
YAML.load_file("./config/config.yml")[environment]
end
end
Run Code Online (Sandbox Code Playgroud)
因此,当我想使用变量时,我会这样做
aws_access_key_id = config['aws_access_key']
Run Code Online (Sandbox Code Playgroud)
我有一个.gitignore文件,当推送到github时忽略了config.yml.例如,当我推送到heroku时,这些环境变量将无法访问?
所以这让我使用heroku方式设置它们就像这样
heroku config:add aws_access_key= myapikey
Run Code Online (Sandbox Code Playgroud)
但是heroku访问这些就像
aws_access_key_id = ENV['aws_access_key']
Run Code Online (Sandbox Code Playgroud)
如何设置我的开发环境以使用方法配置和heroku使用ENV,我是否以错误的方式看待这个?或者我的配置方法是否为我这样做?
任何帮助赞赏
Rake文件
require 'active_support/core_ext'
require './config/config.rb'
require 'bundler/setup'
Bundler.require(:default)
include MyConfig
AssetSync.configure do |con|
con.fog_provider = 'AWS'
con.fog_region = 'eu-west-1'
con.fog_directory = config['fog_directory']
con.aws_access_key_id = config['aws_access_key']
con.aws_secret_access_key = config['aws_secret_key']
con.prefix = "assets"
con.public_path = Pathname("./public")
end
namespace :assets do
desc "Precompile assets"
task :precompile do
AssetSync.sync
end
end
Run Code Online (Sandbox Code Playgroud) 我得到了这个
OmniAuth :: Strategies :: OAuth2 ::/auth/google/callback中的CallbackError csrf_detected | CSRF检测到
我的代码:
require 'sinatra'
require "sinatra/json"
require "sinatra/config_file"
require 'omniauth-oauth2'
require 'omniauth-google-oauth2'
use Rack::Logger
config_file "config/app_config.yml"
use Rack::Session::Cookie, secret: '5fb7w345y3489f523y4h'
configure do
enable :sessions
end
use OmniAuth::Builder do
provider :google_oauth2, settings.google[:client_id], settings.google[:secret],
{
:scope => "userinfo.profile",
:access_type => "offline",
:prompt => "select_account consent",
:name => "google"
}
end
get '/list' do
json get_list
end
get '/' do
%Q|<a href='/auth/google'>Sign in with Google</a>|
end
get '/auth/:name/callback' do
@auth = request.env['omniauth.auth']
@auth.inspect
end …Run Code Online (Sandbox Code Playgroud) 我正在尝试将我的sqlite3数据库迁移到postgresql,但我无法通过此错误.
当我跑 taps server sqlite://db/development.sqlite3 [user] [password]
我一直在 /Users/phillipjarrar/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/sinatra-1.0/lib/sinatra/base.rb:298:in <module:Templates> : uninitialized constant Tilt::CompileSite (NameError)