我有一个Ruby on Rails OpenShift应用程序(ruby 1.9,Rails Rails 3.2.13),在开发环境中没有任何问题。但是,当我将应用程序部署到OpenShift时,我收到以下错误:
ActionView::Template::Error (logo.png isn't precompiled):
2: <header>
3: <div id="header" class="clearfix landing_header">
4: <a href="#" id="logo">
5: <%= image_tag("logo.png") %>
6:
7: </a>
我理解错误说logo.png没有预编译。这是有道理的,因为这些指令是在我的production.rb
环境中设置的:
config.serve_static_assets = false
config.assets.compress = true
config.assets.compile = false
config.assets.digest = true
那么,我的资产是否经过预编译?当我部署我的应用程序时(使用git push
),我可以看到其他人:
remote: Precompiling with 'bundle exec rake assets:precompile'
并且没有错误......即使我使用SSH在OpenShift仓库中搜索预编译资产,我也可以在那里看到它,还有很多其他资产:
> ls public/assets | grep logo
logo-66589ea9e7a1caa7f2151a721d6cdbd2.png
当我在浏览器中点击我的应用程序地址/资产/文件^^时,我可以看到它。唯一的问题是image_tag没有。
我做错了什么?资产是预编译的,不是吗?我错误地使用了image_tag吗?提前谢谢!
答案 0 :(得分:0)
在本地系统上预编译资产,然后推送代码。肯定会起作用。
答案 1 :(得分:0)
回答很晚,但我也遇到了一些问题,这就是我解决它的方法。当我对oepnshift执行“git push”时,它会预先编译资源,如控制台中所示
remote: Precompiling with 'bundle exec rake assets:precompile'
问题我相信这是使用我的开发设置进行预编译,而不是生产设置。为了解决这个问题,我在部署操作挂钩文件中添加了几行(app - &gt; .openshift - &gt; action_hooks - deploy)
cd $OPENSHIFT_REPO_DIR
RAILS_ENV=production bundle exec rake assets:precompile
这会强制它使用生产配置文件进行预编译。
现在唯一的问题是当我进行git推送时,它会预编译两次,一次是openhift的开箱即用,第二次是动作挂钩。仍然应该工作。