En utilisant la tâche de râteau pour générer ces fichiers javascript est vraiment une option. J'utilise des tâches rake pour générer des fichiers de traduction i18n pour JS frontend à partir de fichiers de traduction au format YAML. Une option consiste à utiliser ERB pour les modèles. Je mettrais rakefile sous lib/tasks/foo.rake
et les modèles sous lib/tasks/foo/foo.erb
. Si votre modèle de JS est pas très complexe, je suggère d'utiliser la méthode Hash.to_json
simple pour générer javascript contenu:
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
Mais fichiers de configuration sont quelque chose que vous ne voulez pas seulement d'oublier de régénérer lorsque votre configuration les données sources ont été modifiées. J'utilise une solution pour générer des fichiers JS "minifiés" sur l'environnement de production afin d'ajouter un grand nombre de fichiers javascript ensemble afin que je puisse économiser sur les requêtes HTTP. Mais vous pouvez utiliser essentiellement la même solution. Cela fonctionne très bien si vous utilisez Capistrano pour déployer votre application.
Dans le fichier app/helpers/application_helper.rb
Créer une nouvelle méthode d'assistance qui est disponible dans le monde:
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
Et à votre avis vous suffit d'inclure javascript avec
<%= javascript_include_config_tag %>
L'idée est que ce fichier de configuration JS est en cours généré seulement la première fois sur le chargement de la page après le déploiement de Capistrano frais. Il a aussi un énorme inconvénient que vous ne pouvez pas demander configuration.js
fichier avant la première page de générer, mais dans mon application, cela fonctionne très bien jusqu'à présent.
C'est une bonne idée. Il n'y a probablement pas de centaines, voire de dizaines d'environnements, il n'y aura donc pas de tonnes de fichiers. Je pourrais suggérer un nom légèrement plus instructif, comme "settings _ # {RAILS_ENV.downcase} .js" ou "constants _..." –
Le plus informatif le nom du fichier le mieux. Je suis content que tu aimes l'idée. –