所以我开始调查Rails3中的资产管道,我有一个理想的用例,有点偏僻......所以我正在寻找食谱。
我经常在本地运行webrick进行开发然后运行 用于部署的应用程序实例的Passenger + Apache。
app配置了一个suburi路径,例如http:// server / approot /...
要使webrick路径像部署的实例一样工作,我将map '/approot' do run app
添加到config.ru
。现在webrick也在http:// local:3000 / approot /...
鉴于此设置,我尝试使用rake assets:precompile
,并且在本地,部署 - 丢失文件,错误路径,萤火虫中的404等之间存在很多配置问题。这里有一些解决方案我'我试过了:
config.assets.initialize_on_precompile = false
到application.rb
以防止在预编译资产时尝试初始化production
的应用(我们有几个已部署的环境,并将它们称为不同的名称,ug。) 。
config.assets.precompile += %w( *.js *.css )
到application.rb
包含缺少的jquery.js和ujs以及rails.js等内容。
config.assets.prefix = "/approot/assets"
更正上面的地图(在config.ru中)不适用于资产的问题,因此资产必须预编译为./public/approot/assets
,但我不是确定如果只在本地运行,即如果我部署,我的资产路径是http:// server/approot/approot/(js|css|...)
吗?
在预编译资产时,rake任务切换到env production
,但是从Rails3文档中不清楚sprockets是否继续在本地动态编译并使用这些动态资产,或者它是否会提供静态资源而不是预编译资产?
config.serve_static_assets = true
放入environments/development.rb
,但我不确定这对config.assets.compress = false
和config.assets.debug = true
的效果如何。将assets.debug设置为false似乎隐藏了webrick日志中的GET请求,尽管我看到一篇文章说“解决了问题”[原文如此]。所以我想要一个执行以下操作的配方:
资源从路径 http://server/approot/assets/...
始终如一地正确提供,无论是在乘客还是webrick(即部署或本地)中运行。如果这是不可能的,那么我可以切换我的本地开发环境以使用Passenger + Apache,这不是什么大问题,但我只是想知道它是否可能。
原始资产存在于/app/assets
中,就像普通的Rails3一样,但是当我对它们进行预编译时,它们在部署的env中的工作方式完全相同,因此资产文件引用不会中断 (即现在,当路径明确设置为/assets/image/...
时,有很多引用寻找/approot/assets/image...
。(从Rails3文档中不清楚是否存在关于部署到root与suburi的假设,例如http:// server/assets/...
与http:// server/approot/assets/...
)
sprockets无法在已部署的环境中使用(我们的限制,抱歉)。所以这意味着rails3应用程序必须有效地看起来像一个静态资产应用程序。我知道这是预编译资产应该做的事情,但路径问题阻碍了我按照宣传的方式工作。
TL; DR - 如果我只知道它们的正确组合,我觉得我正在尝试很多可能有用的东西。
答案 0 :(得分:0)
好的,这是一个潜在的可怕的答案,但它似乎现在在两个环境中与webrick一起使用,而且是万圣节后的第二天(尽管我还没有在已部署的插槽中尝试过这种方法)。
除非另有说明,否则一切都是rails new app
代的默认值。
<强>配置/ application.rb中强>
config.assets.initialize_on_precompile = false
environments / production.rb (不是真正的生产,仅用于rake资产:预编译)
config.assets.css_compressor = :yui
config.assets.js_compressor = :uglifier
environments / stage.rb (这是我们部署的环境之一)
config.serve_static_assets = true
<强> config.ru 强>
这是可怕的部分。我复制了地图,这样Rack就能同时服务于suburi和root。因此,显示布局的控制器操作可以有http:// server/approot/foo/index
,而布局中的资源可以从http:// server/assets/...
加载
map '/approot' do
run AppRoot::Application
end
map '/' do
run AppRoot::Application
end
$ rake assets:precompile
$ rails s
在firebug中,我看到链轮提供的单独部件(全部200 OK):
好的,现在在本地测试一个“已部署”的插槽,看看编译的资产是否有效?
$ rails s -e stage
然后我看到正确的预编译资产(全部200 OK):
好的,所以这不如真正的suburi解决方案那么好,我想我将在部署的插槽中遇到问题。第2轮,战斗!