有什么方法可以在 aplication.yml
中编写正则表达式origin: '^(.*\.|)example\.com$/'
〜>像这样 并在配置 application.rb
中调用它Rails.application.config.middleware.insert_before 0, Rack::Cors do
allow do
origins ENV['origin']
debugger
resource '*',
headers: :any,
methods: [:get, :post, :put, :patch, :delete, :options, :head]
end
end
答案 0 :(得分:1)
ENV['origin']
似乎要使用环境变量。因此,ENV会比YML更好。
#Gemfile
gem 'dotenv-rails'
#.env
origin = '^(.*\.|)example\.com$/'
#application.rb
...
origins ENV['origin']
...
答案 1 :(得分:1)
Psych
(<= 1.9 Syck
)ruby的本机YAML
解析器可以处理某些ruby对象的转换,只要它们被正确标记即可。
origin: !ruby/regexp /^(.*\\.|)example\\.com$/
在加载时转换为真实的Regexp
。
require 'yaml'
yml = <<-YML
origin: !ruby/regexp /^(.*\\.|)example\\.com$/
YML
h = YAML.load(yml)
#=> {"origin"=>/^(.*\.|)example\.com$/}
'test.example.com'.match?(h["origin"])
#=> true
为了确定适当的语法,可以使用YAML.dump
,例如
YAML.dump(/^(.*\.|)example\.com$/)
#=> "--- !ruby/regexp /^(.*\\.|)example\\.com$/\n...\n"
请注意,这仅适用于可以正确转换为YAML
值的某些对象
另外,Regexp
类可以将字符串转换为Regexp
对象,因此以下内容也可以工作
require 'yaml'
# note we omit the forward slashes
yml = <<-YML
origin: ^(.*\\.|)example\\.com$
YML
h = YAML.load(yml)
#=> {"origin"=>"^(.*\\.|)example\\.com$"
'test.example.com'.match?(Regexp.new(h["origin"]))
#=> true