我刚刚将我的应用部署到了heroku,我在尝试阅读某些资产方面遇到了很多麻烦。
我正在尝试从多个文件动态加载一些css,然后稍后重新编译它们。不断破坏的行是第一个文件加载:
@css_asset_bootstrap = File.open(ActionController::Base.helpers.asset_path('bootstrap.css'), "r").read
生成此错误:
2015-04-07T23:30:50.098831+00:00 app[web.1]: Errno::ENOENT (No such file or directory @ rb_sysopen - /assets/bootstrap-2d25733981c30e34bd9aa0fb75388f08.css):
我已经尝试了很多东西,包括将我的所有资产都移到了aws cloudfront。有办法解决这个问题吗?在开发环境中完美运行。
只是为了确认一些事情。我已成功预编译并上传了该文件。该文件肯定存在,因为我可以在
中看到它heroku run bash
cd /public/assets/
当我将资产移至云端时,我也可以看到它。
感谢。
编辑1: 不确定这是否是重要信息,但是使用cloudfront上的文件,我可以运行heroku run bash在heroku上启动shell会话。然后我可以:
curl http://xxx.cloudfront.net/assets/bootstrap-2d25733981c30e34bd9aa0fb75388f08.css
让文件正常。我想也许这是一个权限错误,但所有内容都设置为公共,这一切似乎都可以从heroku到aws服务器。
答案 0 :(得分:3)
您要求相对路径中的文件,这可能并不总是有效。尝试绝对:
@css_asset_bootstrap = File.open(Rails.root + ActionController::Base.helpers.asset_path('bootstrap.css'), "r").read
另一个可能更大的问题是Heroku有一个短暂的文件系统,所以当你对dyno进行剔除时,你写的任何更改都可以被删除。
答案 1 :(得分:0)
在我的情况下,使用虚拟机Rails.root
给我这个:'/home/vagrant/projects/.../my-nice-app'
什么是完全不酷的。
我改为使用request.url
给我:'http://localhost:3000/
'这就是我想要的。