如何在Rails的路线5中使用环境变量

时间:2019-05-25 20:43:30

标签: ruby-on-rails ruby-on-rails-5

我可以使环境变量通过.env文件在本地访问应用程序

问题是,我不知道如何在路径中使用变量

我尝试了

的变体
get 'v1/packages<%= ENV["key1"] %>' => 'flatfiles#raw'

不幸的是,这不起作用(浏览器说没有路由匹配,但是我也可以从运行rake routes得知

GET  /v1/packages%3C%25=%20ENV[%22key1%22]%20%25%3E(.:format)

我也尝试过

get 'v1/packages#{ENV["key1"]}' => 'flatfiles#raw'

这条路线

GET  /v1/packages%23%7BENV[%22key1%22]%7D

这两种方法似乎都没有像我希望的那样将'key1'变量插入路由中

出于良好的考虑,我还尝试创建一个Key模型,并以这种方式访问​​它,但路由仍会按字面意义解释该变量

  @key1 = Key.find(1).private_key
  get 'v1/packages#{@key1}'  => 'flatfiles#raw'
GET /v1/packages_and_functions%23%7B@key1%7D

1 个答案:

答案 0 :(得分:2)

我相信您的错误是尝试在单个带引号的字符串中使用格式字符串:

get 'v1/packages#{ENV["key1"]}' => 'flatfiles#raw'

表示该字符串按原样使用。您应该使用双引号代替,以便ruby可以理解您实际上想要字符串中的格式:

get "v1/packages#{ENV['key1']}" => 'flatfiles#raw'

如果您的编辑器对语法着色有适当的支持,您会注意到前一种将显示为单色,而第二种将突出显示格式部分(#{})。

最后,<%= ... %>语法仅在ERB模板中使用,当您编辑某些.ymlhtml.erb文件,或在其中明确使用ERB.new(...)时,Rails会为您处理您的代码。

HTH