如何确定代码运行在什么环境中?

11
hamllayout文件中,我想确定我们是否处于开发和构建环境。我们正在使用Middleman。
我想要做类似这样的事情:
- if environment == 'development'
    / Development Code
    = javascript_include_tag "Dev.js"

我尝试访问Ruby的环境变量,以及在config.rb文件中定义自定义变量,但没有成功。

3个回答

30

你几乎做对了 - 你需要检查一个符号而不是一个字符串:

- if environment == :development
    / Development Code
    = javascript_include_tag "Dev.js"

此外,Middleman还添加了development?build?方法,这些方法可能更易于使用:

- if development?
    / Development Code
    = javascript_include_tag "Dev.js"

这也适用于ERB:

<% if development? %>
<!-- Development Code -->
<%= javascript_include_tag "Dev.js" %>
<% end %>

0

首先,如果可能的话,您应该将逻辑与数据分开。在控制器中确定您的环境,并切换发送到视图(HAML布局文件)的数据。

通常情况下,您会在环境变量中设置一个标志,并从ENV中访问它。例如,Sinatra使用他们的RACK_ENV符号使开发/测试/生产设置在代码内部可用:

:environment - 配置/部署环境
指定部署环境的符号;通常设置为其中之一::development、:test或:production。
:environment默认为RACK_ENV环境变量(ENV['RACK_ENV'])的值,或者当没有设置RACK_ENV环境变量时,默认为:development。
可以显式设置环境:
set :environment, :production

如果必须自己编写代码,那么这是一个不错的方法。


-1
使用由Middleman默认创建的:environment符号: http://rubydoc.info/github/middleman/middleman/Middleman/Application#environment-instance_method 再结合Haml - 您可以做类似这样的事情:
= javascript_include_tag "Dev.js" unless :environment == "developement"

请注意,Middleman的构建过程会将:environment值更改为“build”。
您还可以使用developement?来测试您是否处于开发状态:http://rubydoc.info/github/middleman/middleman/Middleman/Application#development%3F-instance_method 以上所有内容均适用于Middleman 3.0.6,可能无法在较低版本上运行(肯定无法在2.x上运行)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接