为什么Heroku返回'devise/sessions.js没有预编译'?

And*_*vey 9 ruby-on-rails heroku asset-pipeline

我正在向Heroku部署Rails 3.2应用程序.我根据https://devcenter.heroku.com/articles/rails3x-asset-pipeline-cedar在本地预编译资产.

但我得到了

ActionView::Template::Error (devise/sessions.js isn't precompiled):
Run Code Online (Sandbox Code Playgroud)

有人遇到过这种情况么?

什么是确保Devise javascripts预先通过的正确方法.

谢谢!

And*_*vey 6

谢谢你提出的所有建议.经过一番思考后,我意识到问题在于应用程序如何配置为调用控制器特定的javascript.如果有其他人遇到这个问题,这就是我做的.

我一直在布局文件中通过以下标记加载特定于控制器的.js.

<%= javascript_include_tag "application", params[:controller] %>
Run Code Online (Sandbox Code Playgroud)

问题是,如果特定的cotroller.js文件不存在,则会失败.在我的情况下,登录页面失败,因为我没有创建一个devise/sessions.js文件.

我本可以创建这个文件,但我觉得这是一个混乱的方法.我不喜欢有很多空文件的想法.

相反,我明确地从视图中调用特定于控制器的javascripts

<% javascript 'controller.js' %>    
Run Code Online (Sandbox Code Playgroud)

在application_helpers中使用以下帮助器

def javascript(*files)
    content_for(:head) { javascript_include_tag(*files) }
end
Run Code Online (Sandbox Code Playgroud)

到目前为止似乎工作正常.

再次感谢您的建议.

  • 对于那些有兴趣采用添加js文件的方法的人,可以在`app/assets/javascripts`中创建一个`devise`文件夹,然后将`sessions.js`文件放在那里.如果您想要了解登录页面,那就太方便了.注意:您需要列出单独访问的资产:http://stackoverflow.com/questions/7425929/rails-3-1-strategy-for-pre-compiling-controller-specific-js-assets (3认同)

小智 5

我的解决方案

<%= javascript_include_tag "application", controller_name if controller_name != "sessions" %>
Run Code Online (Sandbox Code Playgroud)