首页 文章

使用Rails和ERB从模板文件目录生成文件目录的最合适方法?

提问于
浏览
1

我的目标是在ERB模板驱动的Rails(3)应用程序中生成静态html,javascript和图像文件的目录 . 例如,作为开发人员,我可能想要生成/更新这些文件:

#{Rails.root}/public/products/baseball.html
#{Rails.root}/public/products/football.js

..来自以下模板文件:

#{Rails.root}/product_templates/baseball.html.erb
#{Rails.root}/product_templates/football.js.erb

理想情况下,模板可以访问我的应用程序的Rails环境(包括URL帮助程序,查看助手,部分等) .

实现这一目标的最新和最好的方法是什么?

我尝试使用自定义Rails生成器,但发现我需要编写自定义逻辑来跳过非ERB文件,替换文件名等 . 必须有更好的方法 .

3 回答

  • 1

    这就是我完成类似的事情 . 它接受源目标和目标目录,清除目标,然后处理源目录,ERB处理文件并将它们放在目标中或简单地复制它们(在on-ERB文件的情况下) . 需要修改它以处理递归处理目录 .

    我从rake任务中调用它,如下所示:

    DirectoryGenerator.new.generate(Rails.root.join('src'), Rails.root.join('public', 'dest'))
    
    
    class DirectoryGenerator
      include Rails.application.routes.url_helpers
      include ActionView::Helpers::TagHelper
      default_url_options[:host] = 'www.example.com'
    
      def generate(source, destination)
        FileUtils.rmtree(destination)
        FileUtils.mkdir_p(destination)
    
        Dir.glob(File.join(source, '*')).each do |path|
          pathname = Pathname.new(path)
          if pathname.extname == '.erb'
            File.open(destination.join(pathname.basename.sub(/\.erb$/, '')), 'w') do |file|
              file.puts(ERB.new(File.read(path)).result(binding))
            end
          else
            FileUtils.cp(pathname, File.join(destination, pathname.basename))
          end
        end
      end
    end
    
  • 0

    我不确定你要做什么,这可能有助于提供更好的答案,但这里有一些有用的信息:

    您可以直接调用erb,有关此处的一些信息,可能已经在执行:

    http://www.ruby-doc.org/stdlib/libdoc/erb/rdoc/classes/ERB.html

    对于模板文件列表,一个简单的Dir.glob应该能够帮助您轻松找到特定文件并循环遍历它们:

    http://ruby-doc.org/core/classes/Dir.html#M000629

    我不知道如何建议你的棘手部分是访问帮助程序和Rails提供的其他东西 . 您编写的帮助程序只是模块,因此您可以将它们混合在一起,类似于内置的rails帮助程序 .


    这很有趣并且相关但不能直接回答你的问题,因为它使用Liquid模板引擎而不是ERB,但除此之外,它会执行你正在谈论的一些静态网站生成:

    https://github.com/mojombo/jekyll

  • 0

    你看过Rails模板了吗?

    http://m.onkey.org/rails-templates例如..

    不确定你到底得到了什么..你是否试图通过提供一些参数来生成客户端网站..最终目标?

相关问题