【问题标题】:Javascript Error on Sinatra with NGINX with Unicorn使用 NGINX 和 Unicorn 的 Sinatra 上的 Javascript 错误
【发布时间】:2013-05-20 01:15:52
【问题描述】:

我已经用 Unicorn Web Server 和 Sinatra 创建了一个在 NGINX 上运行的站点。我在本地创建了网站,一切都很好。但是,上传后,主页上的倒计时不起作用。当我使用 chrome(网页版,位于 http://udidreg.com)检查它时,我收到以下错误:

Uncaught TypeError: Object [object Object] has no method 'placeholder' customtime.js:41

Uncaught TypeError: Object [object Object] has no method 'countdown'

但是,当我在本地进行检查时,没有错误,并且应该算。

任何帮助将不胜感激!

【问题讨论】:

    标签: javascript html nginx sinatra unicorn


    【解决方案1】:

    两个我想到了三件事。

    • 您尚未部署更新后的 customtime.js 文件,即使您认为已部署。
    • customtime.js 已被浏览器缓存,尚未收集新的。
    • Gemfile 等未完全描述项目的要求(例如 gem、脚本等),并且由于您的开发环境设置方式,您的开发计算机上不会出现这些错误。

    尽可能对您的环境进行沙箱处理,并确保项目所需的所有内容都在项目中。

    一个典型的例子是在具有管理员角色的帐户的机器上进行开发,然后部署到在具有有限权限的帐户下运行应用程序的机器上。

    Ruby 开发的经典方法是使用 Rubygems 在系统范围内安装 gems,然后通过 Bundler 为项目安装 gems。即使 Gemfile 中遗漏了一些必需的 gem,因为必需的 gem 是在系统范围内安装的,所以不会发生错误。部署时发现这些 gem 丢失,应用程序失败。

    要阻止这种情况发生,请使用 Bundler(如果您是)使用命令 bundle install --binstubs --path vendor 将项目的 gem 沙箱化,然后通过 bundle exec… 或从 bin 目录运行所有内容,例如bin/rackup config.ru。然后,您的项目将从通过 Bundler 安装的 gem 运行。如果缺少任何东西,它将在开发机器和生产机器上都失败。这显然更好。

    为了处理过时的资产,如 javascript 和样式表,我喜欢 the method used in this helpful blog post。我非常喜欢它,我已经分叉了Sinatra::StaticAssets gem 并重写了它以合并它,但我还没有完全完成(虽然它仍然具有摧毁行星的能力,但我担心来自一架载人战斗机的攻击),所以如果你有一个 github 帐户并且听起来它可能对你有用,你可以follow it。如果您想尝试它,只需将开发分支添加到您的 Gemfile 中,并确保让我知道它对您是否有效。

    编辑:I finished the fork and made it into its own gem

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-05
      • 2015-05-21
      • 1970-01-01
      • 1970-01-01
      • 2012-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多