Использование rake task для генерации этих файлов javascript - это действительно вариант. Я использую задачи rake для создания файлов перевода i18n для интерфейса JS из файлов перевода в формате YAML. Одним из вариантов является использование ERB для шаблонов. Я бы поставил rakefile под lib/tasks/foo.rake
и шаблоны под lib/tasks/foo/foo.erb
. Если ваш шаблон JS не очень сложен, я бы предложил использовать простой метод Hash.to_json
для генерации содержимого JavaScript:
namespace :js do
task :generate_config => :environment do
File.open("#{RAILS_ROOT}/public/javascripts/configuration.js", 'w') do |out|
config = {:option_1 => 'Value 1', :option_2 => 'Value 2'}
out << "var CONFIG = #{config.to_json}"
end
end
end
Но файлы конфигурации - это то, что вы просто не хотите забывать восстанавливать, когда ваши исходные данные конфигурации были изменены. Я использую решение для создания «минимизированных» файлов JS в производственной среде, чтобы добавлять огромное количество файлов JavaScript вместе, чтобы я мог сэкономить на HTTP-запросах. Но вы можете использовать в основном то же решение. Это прекрасно работает, если вы используете Capistrano для развертывания своего приложения.
В файле app/helpers/application_helper.rb
создать новый вспомогательный метод, доступный по всему миру:
module ApplicationHelper
def javascript_include_config_tag
if ActionController::Base.perform_caching
unless File.exists?("#{RAILS_ROOT}/public/javascripts/configuration.js")
#
# TODO: Generate configuration data in here
#
config = 'configuration file contents'
File.open("#{RAILS_ROOT}/public/javascripts/configuration.js", 'w') do |out|
out << config
end
end
javascript_include_tag('configuration')
else
# Link to js generated dynamically on each request. Useful in development.
javascript_include_tag('PATH_TO_DYNAMICALLY_GENERATED_JS')
end
end
end
И, на ваш взгляд, вы просто включаете JavaScript с
<%= javascript_include_config_tag %>
Идея в том, что этот файл конфигурации JS генерируется только первый раз при загрузке страницы после нового развертывания Capistrano. Он также имеет огромный недостаток: вы не можете запросить файл configuration.js
перед созданием первой страницы, но в моем приложении он до сих пор работает нормально.