3

我有一个相当复杂的 Rails Web 应用程序,它已经有将近 4 年的历史了:)。它每天都有许多客户使用它,所以当我对它进行彻底的改变时,我必须少一点漫不经心。

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

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

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

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

4

2 回答 2

3

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

为了保留静态文件的“旧”标签助手,我们在它们被资产管道覆盖之前给它们起别名。require 'rails/all'我们在 application.rb上面添加这个片段:

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

因此,在我们看来,我们仍然可以访问它们。但是我们必须改变所有的标签......所以,我们添加一个初始化器来恢复“旧”标签,并在“新”标签前加上“asset_”(或其他)。现在,我们可以同时拥有 public/ 中的静态资产文件和资产管道管理的资产。

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

于 2012-09-14T17:41:29.573 回答
2

这些 Railscast 剧集对我帮助很大。

  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

摘要:

设置您的 Gemfile

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

将您的资产(javascripts、字体、css、图像等)移动到应用程序/资产,如下所示:

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

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

希望这有帮助。

于 2012-06-24T02:50:29.133 回答