2011-06-29 18 views
1

私は:: ActionView含むヘルパー:: AssetTagHelperとその変種の束を試みたが、私は常にメインのためNameError: undefined local variable or method config」を言ってエラーが表示されます。詳細はrakeタスクの内部からcompute_asset_hostにアクセスしますか?

で更新Object`

環境に応じて異なるサーバーに格納されているリソースを参照できるようにする必要があります。私の開発マシンでは、localhost:3000で参照され、運用サーバー上では1つのCDNアドレスにあり、ステージングではさらに別のCDNアドレスになります。当然のことながら、このレーキタスクをローカルで最初にテストし、次にステージングし、最後にステージングして、レーキタスクがアセットホストコンフィグレーション変数に基づいてURLを生成できるようにする必要があります。私は実際には私のビューでこれを行うためにasset_pathというApplicationHelperメソッドを作成しましたが、基本的にはcompute_asset_hostのエイリアスです。しかし、私のrakeタスクにApplicationHelperを組み込み、asset_pathを呼び出すと、compute_public_pathが定義されていないと訴え、ActionView :: Helpers :: AssetTagHelperをインクルード(または拡張)するとcompute_asset_hostの内側からundefined local variable or method 'config' for main:Objectという文句が出ます。ですから、私は何とかActionView :: Helpersによって使用されるconfigコンテナをインスタンス化する必要があります。そのため、compute_asset_hostは環境に基づいて適切なURLを返すことができます。

+0

を追加することはできない何ですか? rakeタスク内でViewヘルパーを呼びたい理由がわかりません。 – Midwire

+0

詳細情報でOPを更新しました –

答えて

0

それは醜いと私は、このしかし...

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

0

これは、私はあなたが達成しようとしているものに、より多くの詳細を

task :it => :environment do 
    include ActionView::Helpers 
    include ApplicationHelper 
    # your code here 
end 
関連する問題