Как узнать, в какой среде работает код?
В layout
файле haml
я хотел бы определить, находимся ли мы в наших средах разработки и сборки. Мы используем Миддмана.
Я хотел бы сделать что-то вроде этого:
- if environment == 'development'
/ Development Code
= javascript_include_tag "Dev.js"
Я попытался получить доступ к переменной среды Ruby, а также определить пользовательскую переменную в файле config.rb
без успеха.
Ответы
Ответ 1
У вас почти все правильно: вам нужно проверить символ, а не строку:
- 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 %>
Ответ 2
Во-первых, если это возможно, вы должны отделить логику от данных. Определите свою среду в контроллере и переключите данные, отправляемые в представление (файл макета 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
Если вам нужно катиться самостоятельно, это хороший способ сделать это.
Ответ 3
Используйте символ среды, созданный по умолчанию посредником:
http://rubydoc.info/github/middleman/middleman/Middleman/Application#environment-instance_method
в сочетании с haml - вы можете сделать что-то вроде:
= javascript_include_tag "Dev.js" unless :environment == "developement"
Обратите внимание, что процесс сборки промежуточных компонентов изменяет значение среды: "build"
вы также можете использовать разработку? чтобы проверить, находитесь ли вы на dev или нет: http://rubydoc.info/github/middleman/middleman/Middleman/Application#development%3F-instance_method
Все вышеизложенное относится к среднему человеку версии 3.0.6 и может не работать в меньших версиях (не работает на 2.x)