在application.yml

时间:2018-08-21 00:19:29

标签: ruby-on-rails ruby regex

有什么方法可以在 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

2 个答案:

答案 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