Ruby on rails 3 从rake任务内部访问compute_asset_主机?
我尝试过包括ActionView::Helpers::AssetTagHelper和一系列的变体,但我总是收到一个错误,对main:Object说Ruby on rails 3 从rake任务内部访问compute_asset_主机?,ruby-on-rails-3,rake,actionview,Ruby On Rails 3,Rake,Actionview,我尝试过包括ActionView::Helpers::AssetTagHelper和一系列的变体,但我总是收到一个错误,对main:Object说NameError:undefined local variable或methodconfig'` 更新了更多信息 我需要能够根据环境引用存储在不同服务器上的资源。在我的开发机器上,它将在localhost:3000处被引用,在生产服务器上,它将位于一个CDN地址,在登台时,它将位于另一个CDN地址。显然,我们希望首先在本地测试这个rake任务,然后在
NameError:undefined local variable或method
config'`
更新了更多信息
我需要能够根据环境引用存储在不同服务器上的资源。在我的开发机器上,它将在localhost:3000处被引用,在生产服务器上,它将位于一个CDN地址,在登台时,它将位于另一个CDN地址。显然,我们希望首先在本地测试这个rake任务,然后在登台测试,最后在登台测试,因此rake任务需要能够基于资产主机配置变量生成url。实际上,我甚至创建了一个名为
asset\u path
的ApplicationHelper方法来在我的视图中执行此操作,但它基本上只是的别名。但是,如果我在rake任务中包含ApplicationHelper并调用asset\u path
它会抱怨compute\u public\u path未定义,然后如果我包含(或扩展)ActionView::Helpers::AssetTagHelper,它会从compute\u asset\u主机内部抱怨main:Object的未定义局部变量或方法“config”。因此,我需要以某种方式调用ActionView::Helpers所使用的配置容器的任何实例,以便compute_asset_host可以根据环境返回正确的URL。这很难看,我试图绕开这类操作,但
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:我在这里找到了查看方法:这就是我所做的
task :it => :environment do
include ActionView::Helpers
include ApplicationHelper
# your code here
end
你能补充更多关于你想要完成什么的细节吗?我不清楚为什么要在rake任务中调用视图助手。