【问题标题】:Wrong fingerprint in Rails 3.1 asset pipeline for JS files in production生产中 JS 文件的 Rails 3.1 资产管道中的指纹错误
【发布时间】:2011-10-24 10:20:06
【问题描述】:

我在部署 CSS 和图像后将项目部署到服务器 - 它可以工作,但 JS 不工作 - 404. HTML 和公共/资产中的 JavaScript 哈希 - 不匹配。

In HTML: application-6851a5d9167871936c32da723dca0f23.js
In public/assets: application-95ecf5bab4b7984abe8c1c23b72a7679.js

【问题讨论】:

  • 您能否在您的问题中添加一些信息(直接通过编辑):该 html 是什么意思?你的意思是Rails在你的源代码中生成的URL吗?我怀疑它在开发中有效。你做了什么来获得资产? rake assets:precompile?您是否更改了配置中的任何内容?这是一个新的 Rails 应用程序还是一个迁移的应用程序?
  • 是的,我的意思是 Rails 在我的源代码中生成的 URL。是的,它在开发中有效,但在生产中无效。我通过 rake assets:precompile 获取资产。是新的 Rails 应用吗
  • 我检查了我的应用程序,HTML 代码和文件路径中的哈希值相同。您是否检查过包含每个文件的指纹的manifest.yml?您在生产中使用哪个服务器?

标签: javascript ruby-on-rails assets


【解决方案1】:

您是否运行了“rake assets:clean assets:precompile”?

另外,如果您使用 GIT,您还需要“git rm”旧版本的资产。如果您通过推送工作区(例如 Heroku)更新生产环境,则您需要对其他版本控制系统执行类似操作。

在您的开发环境中,资产直接从您的源代码库中获取 - 因此,如果您更改它们,则无需再次预编译(在开发过程中节省您的时间)。但是,因此您很容易偶然发现这些资产。

【讨论】:

    【解决方案2】:

    重新启动应用程序为我修复了它。

    例如在应用程序的根目录中:

    touch tmp/restart.txt
    

    或在 Capistrano 3 的 deploy.rb 中:

    namespace :deploy do
      desc 'Restart application'
      task :restart do
        on roles(:app) do
          within release_path do
            execute :touch, 'tmp/restart.txt'
          end
        end
      end
    
      after 'deploy:publishing', 'deploy:restart'
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-30
      • 2012-01-23
      • 1970-01-01
      相关资源
      最近更新 更多