Доступ к compute_asset_host из грабли? - PullRequest
1 голос
/ 29 июня 2011

Я пытался включить ActionView :: Helpers :: AssetTagHelper и кучу вариантов этого, но я всегда получаю сообщение об ошибке NameError: undefined local variable or method config 'для main: Object`

Обновлено с дополнительной информацией

Мне нужно иметь возможность ссылаться на ресурс, который хранится на разных серверах в зависимости от среды. На моей машине для разработки на него будет ссылаться по адресу localhost: 3000, на рабочем сервере он будет находиться по одному адресу CDN, а при постановке - по другому. Очевидно, что мы хотим сначала протестировать эту задачу rake локально, затем при постановке, а затем, наконец, при постановке, чтобы задачи rake могли генерировать URL-адреса на основе переменной конфигурации хоста ресурса. На самом деле я зашел так далеко, что создал метод ApplicationHelper с именем asset_path, чтобы сделать это в моих представлениях, но в основном это просто псевдоним для compute_asset_host . Однако, если я включаю ApplicationHelper в мою задачу rake и вызываю asset_path, он жалуется, что compute_public_path не определен, а затем, если я включаю (или расширяю) ActionView :: Helpers :: AssetTagHelper, он жалуется на undefined local variable or method 'config' for main:Object изнутри compute_asset_host. Поэтому мне нужно каким-либо образом вызывать все экземпляры контейнера конфигурации, которые используются ActionView :: Helpers, чтобы compute_asset_host мог возвращать правильный URL-адрес в зависимости от среды.

Ответы [ 2 ]

0 голосов
/ 24 мая 2012

Это то, что я делаю

task :it => :environment do
  include ActionView::Helpers
  include ApplicationHelper
  # your code here
end
0 голосов
/ 30 июня 2011

Это ужасно, и я пытаюсь обойтись, делая такие вещи, но ...

namespace :test do

  def view(url_options = {}, *view_args)
    view_args[0] ||= ActionController::Base.view_paths
    view_args[1] ||= {}

    view = ActionView::Base.new(*view_args)
    routes = Rails::Application.routes
    routes.default_url_options = {:host => 'localhost'}.merge(url_options)

    view.class_eval do
      include ApplicationHelper
      include routes.url_helpers
    end

    assigns = instance_variables.inject(Hash.new) do |hash, name|
      hash.merge name[1..-1] => instance_variable_get(name)
    end
    view.assign assigns

    view
  end  

  task :it => :environment do
    param = ""
    puts ">>> compute_asset_host returns: [#{view.send("compute_asset_host", param)}]"
  end

end

... может направить вас в направлении решения вашей проблемы.

PS: я нашел способ просмотра здесь: https://gist.github.com/592846

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...