如何知道代码运行在什么环境中?

时间:2012-12-09 10:12:44

标签: ruby haml middleman

layout的{​​{1}}文件中,我想确定我们是否处于开发和构建环境中。我们正在使用米德尔曼。

我想做这样的事情:

haml

我尝试访问Ruby的环境变量,并在- if environment == 'development' / Development Code = javascript_include_tag "Dev.js" 文件中定义自定义变量但没有成功。

3 个答案:

答案 0 :(得分:29)

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

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

Middleman还添加了development? and build? methods,这可能更容易使用:

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

这也适用于ERB:

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

答案 1 :(得分:0)

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

通常,您需要在环境变量中设置一个标记,并在ENV的代码中访问它。例如,Sinatra使用RACK_ENV符号在代码中提供开发/测试/生产设置:

:environment - configuration/deployment environment A symbol
specifying the deployment environment; typically set to one of
:development, :test, or :production. The :environment defaults to the
value of the RACK_ENV environment variable (ENV['RACK_ENV']), or
:development when no RACK_ENV environment variable is set.

The environment can be set explicitly:

set :environment, :production

如果你必须自己动手,这是一个很好的方法。

答案 2 :(得分:-1)

使用中间人默认创建的:environment符号: http://rubydoc.info/github/middleman/middleman/Middleman/Application#environment-instance_method

结合haml - 您可以执行以下操作:

= javascript_include_tag "Dev.js" unless :environment == "developement"

请注意,middlemans构建流程会将:环境值更改为“build”

你还可以使用开发吗?测试你是否在使用dev:http://rubydoc.info/github/middleman/middleman/Middleman/Application#development%3F-instance_method

以上所有内容适用于中间人3.0.6,可能不适用于较小版本(肯定不会在2.x上运行)