jQuery在Rails Production环境下失效的问题
Rails 3.2.6
$ rake assets:precompile
提示如下错误
rake aborted!
You have already activated rake 10.0.4, but your Gemfile requires rake 0.9.2.2. Using bundle exec may solve this.
/home/。。。。。。/config/boot.rb:6:in `<top (required)>'
/home/。。。。。。/config/application.rb:1:in `<top (required)>'
/home/。。。。。。/Rakefile:5:in `<top (required)>'
然后就删除了Gemfile.lock,执行bundle install,此时Gemfile.lock已经有很大变化
之后就发现整个网站的jQuery都失效了,试了网上提到的几个方法都无法解决
在Production环境下是这样,在Development环境是正常的
编译出来的application.js是jQuery JavaScript Library v1.9.1,jquery不好使
后来,尝试恢复原来的Gemfile.lock文件,执行
$ bundle exec rake assets:precompile
编译出来的application.js是jQuery JavaScript Library v1.8.2,问题就没有了
对比public/assets下的application.js
-rw-rw-r-- 1 。。。。。。 103155 Apr 11 14:36 application-0467707f22e0f4e2445becb595f8c3dd.js jQuery JavaScript Library v1.9.1
-rw-rw-r-- 1 。。。。。。 103118 Apr 10 23:50 application-0df8546d2272f613978d29baff65abd5.js jQuery JavaScript Library v1.9.1
-rw-rw-r-- 1 。。。。。。 103012 Apr 11 14:45 application-4e976587af2b41519ababf14f5db0932.js jQuery JavaScript Library v1.8.2
-rw-rw-r-- 1 。。。。。。 103012 Apr 11 14:45 application.js jQuery JavaScript Library v1.8.2
进一步分析,不修改Gemfile文件,只更新依赖Gem
$ bundle update
$ bundle exec rake assets:precompile
jQuery在Production环境仍然无效
修改Gemfile,升级Rails到3.2.13
$ bundle update
$ bundle exec rake rails:update
这几个冲突的文件都不需要修改,选no
$ bundle exec rake assets:precompile
编译出来的application.js也是jQuery JavaScript Library v1.9.1,jquery仍然不好使
原来问题出在jquery-rails的版本上
jquery-rails 2.2.0以后开始使用jquery 1.9.0,jquery 1.9.0和1.8.0的语法上有较大的不同
解决方法是把jquery-rails锁定到之前生效的版本
gem 'jquery-rails', '~> 2.1.4'