rails 4:Errno :: ENOENT(没有这样的文件或目录@ rb_sysopen - / assets /

时间:2015-04-07 23:47:02

标签: ruby-on-rails heroku asset-pipeline

我刚刚将我的应用部署到了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服务器。

2 个答案:

答案 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/'这就是我想要的。