2016-09-21 78 views
5

我在Heroku上部署了一个新版本的Rails 5应用程序,运行在雪松-14堆栈上。它在部署时没有预编译,所以我手动执行了heroku run rake assets:precompile。不过,我可以看到它包含旧资产,同时需要cssjs文件。Heroku为Rails 5应用程序提供旧资产

我的文件在app/assets,所以目录不在资产编译路径中是不可能的。

我对application.rbproduction.rb配置:

config.assets.compile = true 

# I checked the environment variable, it responds to 'enabled', 
# which would return true for the option. 
config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present? 

# Which I changed to expire old assets. 
config.assets.version='1.1' 

我尝试了这些,但他们没有工作:

  • $ heroku restart
  • $ heroku run rake assets:precompile
  • $ heroku run rake assets:clobber

这些奇怪的事情是,他们不影响heroku服务器中的资产,我用$ heroku run ls public/assets进行了检查。即使$ rake assets:precompile后,即使它这样说:

WRITING /app/public/assets/application-{VERY_LONG_HASH}.js 
WRITING /app/public/assets/application-{VERY_LONG_HASH}.js.gz 
WRITING /app/public/assets/application-{VERY_LONG_HASH}.css 
WRITING /app/public/assets/application-{VERY_LONG_HASH}.css.gz 

,当我与$ heroku run ls public/assets偷看,我仍然看到旧资产呆在那里。

编辑:我通过删除public/assets所有本地资产,$ rake assets:clean && rake assets:precompile重新编译他们,包括我git库这些资产来解决它。这里有一个问题:

Heroku不应该负责编译我的资产吗?我想我每次部署我的应用程序时都不应该编译我的资产。谢谢。

+0

虽然您解决了这个问题,但我认为问题在于您在应用程序的'heroku'实例内部执行所有操作,例如'assets:clobber'和'assets:precompile',而不是在您的本地实例中执行此操作并推送到heroku。关于你的问题,自从我开始使用heroku(即1年)以来,我也很想知道。 – Sajan

回答

0

您需要先提交您的更改。 然后在本地

RAILS_ENV=production bundle exec rake assets:precompile 

下一页git add .

下一页got commit -m"assets precompile"

下一页git push origin yourBranchName

部署在Heroku上执行git push heroku yourbranch:master

+0

我已经有github与启用自动部署集成。正如我所说,我很确定该应用程序已被部署。 – YigitOzkavci

+0

通过git状态检查我们的代码的状态,如果它显示任何文件,那么你需要添加并提交它们 –

+0

我想知道的是,我们是否需要包含我们的预编译资产来提交?这不是暴露了编译资产背后的原因吗? 正如我所说,我相信问题不在于提交或推动。 – YigitOzkavci

1

运行和你做

+1

这是一个拙劣的解决方案....你不想将编译后的资产添加到你的git仓库。 – Daniel

相关问题