Сконфигурируйте Rails для использования разных js в разработке и производстве - PullRequest
4 голосов
/ 14 сентября 2010

Я хочу, чтобы Rails вставлял разные js-файлы в режимах разработки и производства.

Пример:

Разработка:

<script src="/javascripts/jquery.js" type="text/javascript"></script>
<script src="/javascripts/myscripts.js" type="text/javascript"></script>

Производство:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script>
<script src="/javascripts/myscripts.min.js" type="text/javascript"></script>

Возможно ли достичь этого в Rails 3?

С уважением, Алексей Захаров

Ответы [ 2 ]

7 голосов
/ 07 апреля 2011

По крайней мере из Rails 3 вы можете передать помощнику javascript_include_tag символ :defaults, который определен внутри вашего config / application.rb в переменной config.action_view.javascript_expansions [: defaults] =

Это будет в настоящее время закомментировано и всегда будет по крайней мере включать application.js.

Если вы хотите задать другой набор значений по умолчанию для производства и разработки, оставьте эту строку закомментированной и откройте config / environment / production.rb и config / environment / development.rb. Любые параметры, определенные здесь, будут переопределять любой набор в application.rb и применяться только в соответствующей среде. Для вашего примера вы хотели бы следующее:

# development.rb
config.action_view.javascript_expansions[:defaults] = %w(jquery.js myscripts.js)

# production.rb
config.action_view.javascript_expansions[:defaults] = %w(http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js myscripts.min.js)
1 голос
/ 14 сентября 2010

У вас может быть вспомогательный метод, загружающий ваши файлы js и выполняющий проверку условий относительно того, в какой среде он находится.

app / views / layouts / application.html. * (Везде, где вы обычно включаете свой JavaScript)

load_javascript

приложение / хелперы / application_helper.rb

def load_javascript
  if Rails.env.production?
    javascript_include_tag 'js1', 'js2', :cache => true
  else
    javascript_include_tag 'js3', 'js4'
  end
end

Вы могли бы СУШИТЬ это немного дальше, если бы load_javascript вернул вам только список файлов и имел только один javascript_include_tag.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...