Parallax.js图像在本地呈现,但在Heroku上没有生成

时间:2017-09-13 19:13:30

标签: ruby-on-rails heroku devise

消除歧义:有两种流行的插件名为" parallax.js"。我指的是this一个。

开发中,视差和非视差图像在我的ERB模板中完美运行。但是在制作(在Heroku上)中,只有非视差图像正在渲染。我目前怀疑我的问题在于Rails资产管道,但推荐的修复程序尚无效(见下文)。

parallax.js文档提示以下用法:

<div class="parallax-window" data-parallax="scroll" data-image-src="/path/to/image.jpg"></div>

但是为了使用资产管道,我已将其更改为:

<div class="parallax-window" data-parallax="scroll" data-image-src="<%= image_url('image_file.jpeg') %>"></div>

(除了image_url之外,我还尝试了image_tagimage_path。)

如前所述,这一切在我的本地机器上运行良好。

但在制作中,Chrome浏览器控制台会记录丢失图像的错误: Failed to load resource: the server responded with a status of 404 (Not Found)

所以我走下了兔子洞:

其他SO页面(即:herehere)建议执行rake assets:precompile RAILS_ENV=productionheroku run rake assets:precompile的变体形式。

后一个命令花了几分钟编译无关的css&amp; js资产,并没有解决问题。前一个命令产生以下错误:

Devise.secret_key was not set. Please add the following to your Devise initializer:

  config.secret_key = (... and so on)

使用heroku控制台,我确保ENV['SECRET_KEY']ENV['SECRET_KEY_BASE']存在正确的值。

在我devise.rb中,我有: config.secret_key = ENV['SECRET_KEY_BASE'] if Rails.env == 'production'

production.rb我有:

config.serve_static_assets = true config.assets.compile = true config.assets.digest = true

这可能是不必要的信息,但我已经将其包括在内,因为它似乎都是相关的。

谢谢。

1 个答案:

答案 0 :(得分:0)

从服务器用于运行搜索的路径

您的服务器找不到包含您所提供路径的文件,因此请告诉我们您在生产和开发类型中使用控制台搜索的位置

Rails.application.config.assets.paths       

然后评估这些路径中的任何差异,因为这是服务器将搜索您的资产的位置

该文件在生产中不存在

如果您将开发此参数设置为false,它也可能无法在开发中使用,这表明服务器也没有在该环境中找到图像并且正在回退到app/assets

config.assets.unknown_asset_fallback = false

我想知道你的git存储库中是否存在该文件?因为您要通过git上传到制作,所以您可以在git下的public/assets存储库中查看该文件,然后您可以访问您的网站,例如https://sprachspiel.xyz有图片

<img class="image_inverted" src="/assets/building-14c0a7cb155ad93ffbad41ab5ecb491691f2fc34684c7aa5735fedc659f99f76.svg" alt="Building">

我可以使用以下路径显示资产:

https://sprachspiel.xyz/assets/building-14c0a7cb155ad93ffbad41ab5ecb491691f2fc34684c7aa5735fedc659f99f76.svg

如果你在git存储库中找不到指纹文件,或者你无法在服务器/域上显示它,那就意味着开发服务器只是使用app/assets文件夹中的那个,而且文件有没有预编译/指纹

因此您需要确保何时预编译开发

rails assets:precompile

您在git存储库中包含那些指纹文件

git add .

然后你需要检查添加的文件

git status

应该以绿色显示新的预编译文件,因此它会包含一些application-fingerprint.js .scss以及一些图片

然后你需要提交

git commit -m 'assets precompile'

并推送到制作git push heroku master

现在你的 heroku主机你的 git存储库中有完全相同的文件,你应该检查heroku登录的详细信息并查看正在上传的文件,然后您可以访问自己的应用域,并且应该能够显示所有文件(例如

https://sprachspiel.xyz/assets/application-461aa436b906133a708293d3f509c1908b34cf5b3d06c38332fcd7a5d75648a9.js

问题在于,正如您从我的git存储库中看到的那样

https://github.com/fabriziobertoglio1987/sprachspiel/tree/master/public/assets

我有很多application.jsscss,同一版本的相同图片有不同的指纹。这就是为什么有时他们会告诉您删除包含rm -r public/assetsgit add .git commit -m 'deleted assets'的文件夹,然后推送到github和heroku

因为拥有不同指纹的同一文件的多个版本令人困惑,因为heroku只会为application.jsscss上传1个文件,并且每张图片都会根据sprockets-manifest-fingerprint.json中包含的设置上传{1}}

包括每个文件的指纹名称

{"files":{"anvil-24236-40f6914d480cedd181af319818100046542752b1af2618a9540560b9fe17441f.svg":{"logical_path":"anvil-24236.svg","mtime":"2017-06-19T00:05:49+07:00","size":3886,"digest":"40f6914d480cedd181af319818100046542752b1af2618a9540560b9fe17441f","integrity":"sha256-QPaRTUgM7dGBrzGYGBAARlQnUrGvJhipVAVguf4XRB8="},"anvil-4e059374f73b4972cad762b9ab5326dfce178997ad7dc902e5fd50c0db019c3d.svg":...}

https://github.com/fabriziobertoglio1987/sprachspiel/blob/master/public/assets/.sprockets-manifest-b19e945ef55d302416370238b2625751.json