根据环境传递不同的符号作为参数
Passing different symbols as a parameter depending on the enviroment
我今天开始学习 ruby,但我很难理解符号以及如何正确使用它们。
现在我在一个简单的服务器和网站上工作,当我在远程服务器上测试时,我使用 :TLSv1
证书,在我的本地机器上使用 :SSLv23
证书只是因为它没有其他任何东西就可以工作。
为了在那些不同的环境中测试时不必更改证书——因为我可能会忘记更改——我尝试像这样为它们设置一个标志:
if ENV['environment'] == 'development'
ssl_method = ":SSLv23"
else
ssl_method = ":TLSv1"
end
response = HTTParty.get('mywebsite.com/', :ssl_version => ssl_methos.to_sym)
它不起作用。 returns 当我尝试连接到本地主机时出现此错误:
undefined local variable or method `ssl_method' for #<service> Did you mean? method
我可以使用什么替代方案?
更新
嗯,我不知道是否有更好的选择,所以我改成了这个并开始工作。
if ENV['environment'] == 'development'
$ssl_method = "SSLv23"
else
$ssl_method = "TLSv1"
end
response = HTTParty.get('mywebsite.com/', :ssl_version => $ssl_method.to_sym)
我忘记从字符串中删除 :
,我不得不使用 $
定义为全局变量。我是一个 python 人,所以我从没想过这里的全局变量会有所不同。
你不需要定义一个全局变量,在这里使用符号也没有问题,我注意到这里有一个错字
HTTParty.get('mywebsite.com/', :ssl_version => ssl_methos.to_sym)
ssl_methos
您需要像对全局变量所做的那样更改为 ssl_method
。
像这样的东西应该可以工作:
ssl_method =
if ENV['environment'] == 'development'
:SSLv23
else
:TLSv1
end
response = HTTParty.get('mywebsite.com/', :ssl_version => ssl_method)
在我的示例中,2 个 ssl 方法只是符号。在您的 get
调用中,您只是将它们转换回带有 to_sym
的符号,但如果您将它们初始化为符号,则不需要转换它们。
您的代码示例有一个拼写错误 (methos
),但我想我知道错误的根本原因(或者至少有一个合理的猜测,因为我在测试行为时做了同样的事情).
在您的代码片段中,您使用了 ssl_method
(单数,用于 2 个赋值),但在您的 get
调用中,您尝试对 ssl_methods
变量使用 call/look (复数,在 HTTParty 调用中)。
由于 ssl_methods
从未被分配为变量或定义为方法 Ruby 认为您可能打算调用 method
方法(实际上是ruby)
我今天开始学习 ruby,但我很难理解符号以及如何正确使用它们。
现在我在一个简单的服务器和网站上工作,当我在远程服务器上测试时,我使用 :TLSv1
证书,在我的本地机器上使用 :SSLv23
证书只是因为它没有其他任何东西就可以工作。
为了在那些不同的环境中测试时不必更改证书——因为我可能会忘记更改——我尝试像这样为它们设置一个标志:
if ENV['environment'] == 'development'
ssl_method = ":SSLv23"
else
ssl_method = ":TLSv1"
end
response = HTTParty.get('mywebsite.com/', :ssl_version => ssl_methos.to_sym)
它不起作用。 returns 当我尝试连接到本地主机时出现此错误:
undefined local variable or method `ssl_method' for #<service> Did you mean? method
我可以使用什么替代方案?
更新
嗯,我不知道是否有更好的选择,所以我改成了这个并开始工作。
if ENV['environment'] == 'development'
$ssl_method = "SSLv23"
else
$ssl_method = "TLSv1"
end
response = HTTParty.get('mywebsite.com/', :ssl_version => $ssl_method.to_sym)
我忘记从字符串中删除 :
,我不得不使用 $
定义为全局变量。我是一个 python 人,所以我从没想过这里的全局变量会有所不同。
你不需要定义一个全局变量,在这里使用符号也没有问题,我注意到这里有一个错字
HTTParty.get('mywebsite.com/', :ssl_version => ssl_methos.to_sym)
ssl_methos
您需要像对全局变量所做的那样更改为 ssl_method
。
像这样的东西应该可以工作:
ssl_method =
if ENV['environment'] == 'development'
:SSLv23
else
:TLSv1
end
response = HTTParty.get('mywebsite.com/', :ssl_version => ssl_method)
在我的示例中,2 个 ssl 方法只是符号。在您的 get
调用中,您只是将它们转换回带有 to_sym
的符号,但如果您将它们初始化为符号,则不需要转换它们。
您的代码示例有一个拼写错误 (methos
),但我想我知道错误的根本原因(或者至少有一个合理的猜测,因为我在测试行为时做了同样的事情).
在您的代码片段中,您使用了 ssl_method
(单数,用于 2 个赋值),但在您的 get
调用中,您尝试对 ssl_methods
变量使用 call/look (复数,在 HTTParty 调用中)。
由于 ssl_methods
从未被分配为变量或定义为方法 Ruby 认为您可能打算调用 method
方法(实际上是ruby)