所以我开发了我的网络应用程序,准备推送,但是在heroku上测试已经导致了一些问题。到目前为止,这是最大的一个。
我在展示页面的顶部有这段代码
var api = '<%= @event.link.split('/')[-1] %>';
但是,在heroku中我收到一个控制台错误,指出api是一个未被捕获的引用错误。见下文。
Uncaught ReferenceError: api is not defined
我必须更改生产环境vars才能进行javascript预编译。 (他们没有被发现,并且在我这样做之前发出了404错误。
任何想法/帮助都会很好,如何使它成为api可以在javascript文件中使用(它在本地工作正常)
萨姆
答案 0 :(得分:0)
问题似乎是您为静态命令链(JS)调用动态值。
// @event won't be present unless there's a request
var api = '<%= @event.link.split('/')[-1] %>';
Javascript是静态的(尤其是在生产中运行之前预先编译的)。这意味着JS中的任何引用都必须来自加载到DOM
的对象。
因为您正在调用@event
,这是一个Ruby @instance_variable
,我猜测您的JS根本无法读取它,特别是如果您正在进行预编译。
您需要移除对@event
的动态引用:
var api = "test";
-
如果上述方法有效,您必须重构代码,以便可以通过HTML元素访问@event
:
var api = $("#event").data("event-link");
<div id="event" data-event-link="......"> </div>