gpt4 book ai didi

ruby - 如何使用从 heroku 以编程方式获取当前主机并在 rspec 测试中使用它?

转载 作者:太空宇宙 更新时间:2023-11-03 16:45:17 24 4
gpt4 key购买 nike

我正在编写一个简单的 web 应用程序 (sinatra),它就是 github authentication

我必须创建一个带有回调参数的链接,例如:https://github.com/login/oauth/authorize?client_id=b5b1a33df1c7b5acccac&redirect_uri=http://localhost:4567/step2callback&scope= public_repo,user,gist,admin:repo_hook,gist,这样当用户点击它时,它会进行身份验证,授权我的应用程序,然后将用户发送回我的网络应用程序。

因为我使用的是 rspec,所以我想制作一个通过测试和生产的代码,所以我想获取当前主机+端口以在我生成链接的代码上使用它,例如:

HOST = get_current_host # this is the problem, how to get it?
@authorize_url = @client.authorize_url(@client.client_id,
{
:redirect_uri => "#{HOST}/step2",
:scope => 'public_repo,user,gist,admin:repo_hook,gist'
})

所以,我的问题是如何在 heroku 上获取当前运行的主机,这样我的代码才能在测试和生产中运行?

最佳答案

different environments可以配置不同的值

下面给出一个简单的例子:

# File: test.rb
require 'sinatra'

# Set the values of various host names based on deployment environment
configure(:production) { set :host, "production-host" }
configure(:development) { set :host, "development-host" }
configure(:test) { set :host, "test-host" }

get '/' do
"Hi #{settings.host}"
end

RACK_ENV 环境变量设置为环境值 - productiondevelopmenttest

>set RACK_ENV=test

运行 Sinatra 应用

>ruby test.rb
[2015-12-17 20:20:46] INFO WEBrick 1.3.1
[2015-12-17 20:20:46] INFO ruby 2.1.7 (2015-08-18) [x64-mingw32]
== Sinatra (v1.4.6) has taken the stage on 4567 for test with backup from WEBrick
[2015-12-17 20:20:46] INFO WEBrick::HTTPServer#start: pid=11040 port=4567

访问网址:

>curl http://localhost:4567
Hi test-host

如果您使用 Rack 来运行您的 Sinatra 应用程序,您可以按照 config.ru

# config.ru
require 'sinatra'
require './test.rb'

configure(:production) { set :host, "production-host" }
configure(:development) { set :host, "development-host" }
configure(:test) { set :host, "test-host" }

run Sinatra::Application

在这种情况下,test.rb 将被简化如下:

# test.rb
require 'sinatra'

get '/' do
"Hi #{settings.host}"
end

您可以在命令行中指定环境,如下所示:

> rackup -E test config.ru

这个答案的灵感来自 Sinatra configuring environments on the fly

关于ruby - 如何使用从 heroku 以编程方式获取当前主机并在 rspec 测试中使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34335378/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com