Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在预编译资源时临时更改输出路径,链轮/轨道资源管道,3.1.0_Ruby On Rails_Ruby On Rails 3.1_Sprockets_Asset Pipeline - Fatal编程技术网

Ruby on rails 如何在预编译资源时临时更改输出路径,链轮/轨道资源管道,3.1.0

Ruby on rails 如何在预编译资源时临时更改输出路径,链轮/轨道资源管道,3.1.0,ruby-on-rails,ruby-on-rails-3.1,sprockets,asset-pipeline,Ruby On Rails,Ruby On Rails 3.1,Sprockets,Asset Pipeline,我正在尝试更新此代码以使用已发布的Rails 3.1.0: # temporarily set the static assets location from public/assets to our spec directory ::Rails.application.assets.static_root = Rails.root.join("spec/javascripts/generated/assets") ::Rake.application['assets:clean'

我正在尝试更新此代码以使用已发布的Rails 3.1.0:

  # temporarily set the static assets location from public/assets to our spec directory
  ::Rails.application.assets.static_root = Rails.root.join("spec/javascripts/generated/assets")

  ::Rake.application['assets:clean'].invoke
  ::Rake.application['assets:precompile'].invoke
现在Sprocket::Environment#static_root已被删除,临时更改Sprocket输出目录的最佳方法是什么


编辑:我还希望能够清理自定义输出目录中的资产:)

您可以使用
config.assets.prefix
,但这仍然会将资产放在公共目录中(请参阅rake任务,该任务将
公共路径与前缀连接起来)

在您的情况下,这应该有效:

Rails.application.config.assets.prefix = "../spec/javascripts/generated/assets"
Rails.application.config.assets.manifest = File.join(Rails.public_path, config.assets.prefix)
我必须指定清单路径,因为链轮railtie的装载顺序很奇怪。如果不这样做,它就会被困在
公共/资产
,这是不存在的,并破坏了rake任务。YMMV

旁注:我一开始在开发环境中尝试过,但是
config.assets.prefix
拒绝更改。我怀疑将
config.assets.enabled
设置为
true
会解决这个问题,但我还没有时间测试它


作为奖励,
assets:clean
与此解决方案完美配合(您可以自己看到)

我真的很喜欢这种问题,它给了我一个绝佳的理由,让我可以深入了解rails源代码:-)一旦此PR被合并,这将很快在rails 4中起作用:。在此之前,您可以使用。