我们的预编译资产选项在生产中没有正确编译,因此,我们无法使用最后开发的功能,因为它们严重依赖于JS.
没有试图影响任何人如何分析这个问题,这是我试图让它工作的一些:
>本地预编译资产,推送到github repo,从本地计算机部署到ec2. cap部署是本地的,代码被推送到ec2是github上的代码.
>根据建议尝试使用capistrano任务.在Capfile中使用加载’deploy’assets’,并使cap部署:安装任务执行其任务.
>使用选项cap deploy:assets:clean然后cap deploy:assets:precompile
尝试从public中移除资源,然后在deploy.rb中使用pipeline_precompile任务
>过期的资产,迫使rails预编译在application.rb中改变asset.versions的一切
>尝试在environment / production.rb中的config.assets上的不同组合
>最后,尝试删除生产中的公共/资产,并使用RAILS_ENV = production bundle exec rake assets预编译:预编译
该应用程序只是不使用新的JS文件.如果您在repo或服务器本身检查代码,我引用了一个简单的评论到name.js.coffee(“#显示和隐藏菜单,取决于数据库上的数据”在第xxx行),这不是在编译的asset.js在生产中.这是一个快速测试,以确保最近的资产被使用.
这里的整个问题是js和css文件,没有那么多的轨道.这就是为什么这么难测试或找到..因此最近js框架的普及的原因之一.如果出现问题,您不必杀死自己,寻找问题的位置.如果问题出在ruby或者轨道上,通常不需要花太多时间才能找到.一旦你得到了js,css和浏览器的兼容性,那么这就是现在的问题.
这是我的deploy.rb文件.跑道3.2.12 ruby-1.9.3-p327:
# $:.unshift(File.expand_path('./lib',ENV['rvm_path'])) # Load rvm's capistrono plugins require 'rvm/capistrano' require 'bundler/capistrano' set :rvm_type,:user set :user,'username' set :domain,'ip_address' set :application,"app_pro" set :keep_releases,2 # It keeps on two old releases. # git repo details set :scm,:git # You can set :scm explicitly or Capistrano will make an intelligent guess based on known version control directory names set :repository,"git@github.com:user/app.git" set :scm_username,'user' set :git_enable_submodules,1 set :git_shallow_clone,1 set :branch,'master' # Or: `accurev`,`bzr`,`cvs`,`darcs`,`git`,`mercurial`,`perforce`,`subversion` or `none` role :web,domain # Your HTTP server,Apache/etc role :app,domain # This may be the same as your `Web` server role :db,domain,:primary => true# 'ec2-23-23-156-118.compute-1.amazonaws.com' This is where Rails migrations will run # role :db,"your slave db-server here" # deply options default_run_options[:pty] = true set :ssh_options,{:forward_agent => true} set :ssh_options,{:auth_methods => "publickey"} set :ssh_options,{:keys => ["~/Downloads/key.pem"]} set :deploy_to,"/home/user/appdir" set :deploy_via,:remote_cache set :use_sudo,false # if you want to clean up old releases on each deploy uncomment this: after "deploy:restart","deploy:cleanup" # if you're still using the script/reaper helper you will need # these http://github.com/rails/irs_process_scripts # If you are using Passenger mod_rails uncomment this: namespace :deploy do task :start do # run COMMAND="/etc/init.d/Nginx restart" invoke SUDO=1 run "sudo /etc/init.d/Nginx restart" # exit end after "deploy:start","deploy:cleanup" task :stop do ; end task :restart,:roles => :app,:except => { :no_release => true } do run "touch #{File.join(current_path,'tmp','restart.txt')}" end task :setup_config,roles: :app do run "mkdir -p #{shared_path}/config" put File.read("config/database.example.yml"),"#{shared_path}/config/database.yml" puts 'now edit the config file database in #{shared_path}' end after 'deploy:setup','deploy:setup_config' desc "Symlink shared resources on each release - not used" task :symlink_config,:roles => :app do run "ln -nfs #{shared_path}/config/database.yml #{release_path}/config/database.yml" end after 'deploy:finalize_update','deploy:symlink_config' desc "It helps to seed database with values" task :seed do run "cd #{current_path}; bundle exec rake db:seed RAILS_ENV=#{rails_env}" end task :create_schema do run "cd #{current_path}; bundle exec rake db:create RAILS_ENV=#{rails_env} --trace" end end
正在工作的新/替代(deploy_new2.rb)文件:
# On-working new/alternative deploy.rb file: require 'rvm/capistrano' require 'bundler/capistrano' set :rvm_type,:user set :application,"ip_address" set :domain,'ip_address' # Roles role :web,domain role :app,domain role :db,:primary => true #deployment details set :deploy_via,:remote_cache set :user,"username" set :copy_compression,:bz2 set :git_shallow_clone,1 set :scm_verbose,true set :use_sudo,false set :deploy_to,"/home/user/dir" default_run_options[:pty] = true set :ssh_options,{:keys => ["~/Downloads/key.pem"]} #repo details set :scm,:git set :repository,'user' set :keep_releases,2 set :branch,"master" namespace :deploy do # task :start,:except => { :no_release => true } do # # not need to restart Nginx every time # # run "service Nginx start" # run "cd #{release_path} && touch tmp/restart.txt" # end # after "deploy:start","deploy:cleanup" # after 'deploy:cleanup','deploy:symlink_config' # You do not need reload Nginx every time,eventhought if you use passenger or unicorn # task :stop,:except => { :no_release => true } do # run "service Nginx stop" # end # task :graceful_stop,:except => { :no_release => true } do # run "service Nginx stop" # end # task :reload,:except => { :no_release => true } do # run "cd #{release_path} && touch tmp/restart.txt" # run "service Nginx restart" # end task :restart,:except => { :no_release => true } do run "cd #{release_path} && touch tmp/restart.txt" end # If you enable assets/deploy in Capfile,you do not need this # task :pipeline_precompile do # # run "cd #{release_path}; RAILS_ENV=#{rails_env} bundle exec rake assets:precompile" # # precompile assets before deploy and upload them to server # # run_locally("RAILS_ENV=#{rails_env} rake assets:clean && RAILS_ENV=#{rails_env} rake assets:precompile") # # top.upload "public/assets","#{release_path}/public/assets",:via =>:scp,:recursive => true # end end # you do not need to this,because you already add require 'bundler/capistrano' # before "deploy:assets:precompile","bundle:install"
和./Capfile:
load 'deploy' # Uncomment if you are using Rails' asset pipeline load 'deploy/assets' load 'config/deploy' # remove this line to skip loading any of the default tasks
预先感谢您的任何帮助!如果您需要更多信息,请告诉我们
解决方法
从deploy.rb中删除:precompile_assets任务可能会解决此问题.如果您查看Capistrano的源代码,您将看到它实现:precompile_assets完全不同:https://github.com/capistrano/capistrano/blob/legacy-v2/lib/capistrano/recipes/deploy/assets.rb