逐步升级到Rails资产管道

时间:2012-06-24 02:12:21

标签: ruby-on-rails asset-pipeline

我有一个相当复杂的Rails Web应用程序,已有将近4年了:)。许多客户每天都在使用它,所以当我对它做出根本改变时,我必须少一点骑士。

我已经设法将它迁移到rails 3.2.2并仍然可用,但是有很多代码仍然使用Scriptaculous,Prototype的Ajax调用(例如用于分页)等等。

我想慢慢将所有这些迁移到使用jQuery UJS和Coffeescript,但我必须逐步进行这些更改,最好是一次跨越多个“版本”的一个控制器。

但我看到打开资产是一个布尔开关。

如何在不破坏大量代码的情况下将现有代码迁移到资产管道?我应该采取什么预防措施?

2 个答案:

答案 0 :(得分:3)

如果还不晚,我们发现启用资产管道的技巧仍然存在,公共文件夹中仍有许多css和js:

为了保留静态文件的“旧”标记助手,我们在它们被资产管道覆盖之前对它们进行别名。我们将此代码段添加到application.rb中的require 'rails/all'上方:

require 'rails'

ActiveSupport.on_load(:action_view) do
  alias_method :without_asset_pipeline_js,  :javascript_include_tag
  alias_method :without_asset_pipeline_css, :stylesheet_link_tag
  alias_method :without_asset_pipeline_img, :path_to_image
end

因此,在我们的观点中,我们仍然可以访问它们。但是我们必须更改所有标签......所以,我们添加一个初始化程序来恢复“旧”标签,并将“new”标签加上'asset_'(或其他)的前缀。现在,我们可以在公共/资产管道中管理静态资产文件和资产管道。

目前,我们没有遇到这种方法的问题(除了它不适用于图像!),但我们是开始......

答案 1 :(得分:2)

这些有轨电视节目给我带来了很多帮助。

  1. http://railscasts.com/episodes/279-understanding-the-asset-pipeline
  2. http://railscasts.com/episodes/282-upgrading-to-rails-3-1
  3. http://railscasts.com/episodes/318-upgrading-to-rails-3-2
  4. 摘要:

    设置你的Gemfile

    group :assets do
      gem 'sass-rails'
      gem 'coffee-rails'
      gem 'yui-compressor' # i'm using yui for compressor
    end
    

    将您的资产(javascripts,fonts,css,images等)移动到app / assets,我这样:

    app/
      assets/
        fonts/
        images/
        javascripts/
        stylesheets/
    

    在css上,将url helper更改为font-url,image-url或assets-url。您可以在此处找到更多信息,https://github.com/rails/sass-rails。也许您会想要使用登台服务器来检查资产管道工作是否正常,至少对于您的应用所服务的静态资产。还要确保加载了多次javascript文件。 (在我升级到资产管道之前,这让我很头疼。)

    希望这有帮助。