2012-02-08 18 views
8

मेरे अनुप्रयोग सही ढंग से की तैनाती होने लगता है, लेकिन मैं इस त्रुटि हो रही है:Capistrano संकलित संपत्ति त्रुटि - संपत्ति: precompile: nondigest?

 * executing "cd /home/deploy/tomahawk/releases/20120208222225 && bundle exec rake RAILS_ENV=production RAILS_GROUPS=assets assets:precompile" 
    servers: ["ip_address"] 
    [ip_address] executing command 
*** [err :: ip_address] /opt/ruby/bin/ruby /opt/ruby/bin/rake assets:precompile:nondigest RAILS_ENV=production RAILS_GROUPS=assets 

मैं संपत्ति संकलित करने के लिए कोशिश कर रहा है के लिए यहाँ समाधान की कोशिश की है: http://lassebunk.dk/2011/09/03/getting-your-assets-to-work-when-upgrading-to-rails-3-1/

और यहाँ: http://railsmonkey.net/2011/08/deploying-rails-3-1-applications-with-capistrano/

और यहाँ:

: http://dev.af83.com/2011/09/30/capistrano-rails-3-1-assets-can-be-tricky.html

यहाँ मेरी deploy.rb है

+0

मेरे रेल 3.1 एप को तैनात करते समय मेरे पास बिल्कुल वही है। मुझे लगता है कि [sprockets रेक कार्य] में छिपा हुआ है (https://github.com/rails/rails/blob/master/actionpack/lib/sprockets/assets.rake) कहीं, लेकिन मुझे यह नहीं दिखाई देता है। क्या यह हो सकता है कि 'precompile: संपत्ति: nondigest' कार्य stderr या कुछ के लिए एक चेतावनी लॉग, और यह capistrano द्वारा उठाया जाता है? – HectorMalot

+0

आपको सच कहने के लिए यह नाराज सामान समझने के मेरे दायरे से थोड़ा सा है (अभी भी मेरे सिर को प्रीकंपाइल के चारों ओर लपेट रहा है :) - लेकिन मैंने इसे एक दोस्त को दिखाया और उसने यह कहा ... "मुझे नहीं लगता कि वे त्रुटियां हैं सभी मुझे लगता है कि आउटपुट किसी भी तरह से गड़बड़ हो गया है, जब यह सामान्य आउटपुट का उपयोग करता है, तब तक जब आप तैनाती खत्म कर देते हैं तो आपको एक त्रुटि स्ट्रीम लगता है, तो एक वास्तविक त्रुटि निष्पादन रोकती है – fatfrog

उत्तर

1

मैं बाद में देखा है कि Capistrano वर्ष विज्ञप्ति हटाने में सक्षम नहीं था, मैं एक त्रुटि मिली:

*** [err :: ip_address] sudo: no tty present and no askpass program specified 

मैं इस त्रुटि के संबंध इस लिंक मिल गया: http://www.mail-archive.com/[email protected]/msg07323.html

मैं करने के लिए इस लाइन को जोड़ने के लिए किया था मेरी तैनाती फ़ाइल:

default_run_options[:pty] = true 

यह भी अजीब त्रुटि को हल करता है जो मैं ऊपर प्राप्त कर रहा था।

आधिकारिक स्पष्टीकरण, जो मुझे समझ नहीं आता :)

कोई डिफ़ॉल्ट PTY। 2.1 से पहले, कैपिस्ट्रानो प्रत्येक आदेश के लिए छद्म-टीटीई का अनुरोध करेगा जिसे उसने निष्पादित किया था। उपयोगकर्ता के लोड होने के लिए प्रोफ़ाइल स्क्रिप्ट का कारण बनने का दुष्प्रभाव था। खैर, और नहीं! 2.1 के रूप में, Capistrano अब प्रत्येक कमांड पर एक पीटीआई का अनुरोध नहीं करता है, जिसका अर्थ है कि आपके .profile (या .bashrc, या जो कुछ भी) प्रत्येक आदेश पर ठीक से लोड किया जाएगा! नोट, हालांकि, कुछ ने कुछ सिस्टमों पर रिपोर्ट की है, जब एक पीटी आवंटित नहीं किया जाता है, तो कुछ आदेश स्वचालित रूप से गैर-इंटरैक्टिव मोड में जाएंगे। यदि आप कमांड प्रॉम्प्ट नहीं देख रहे हैं जैसे कि वे svn या passwd की तरह करते हैं, तो आप निम्न कैप्फ़ाइल में निम्न पंक्ति जोड़कर पिछले व्यवहार पर वापस जा सकते हैं: default_run_options [: pty] = true

7

पहले नीचे

group :production do 
gem 'therubyracer' 
gem 'execjs' 
end 

तो मणि जोड़ने के लिए अपनी टोपी फ़ाइल में भूल नहीं है सिर्फ अपने after_update_code में इस लाइन को जोड़ने के

run "cd #{release_path}; rake assets:precompile RAILS_ENV=production " 

यह मेरे लिए ठीक काम किया;)

चीयर्स,

ग्रेगरी हॉरियन

+4

हे दोस्त, मैं सलाह दूंगा कि आप अपना न दिखें आपके संदेश में आईपी, इससे आपके सर्वर पर कुछ हमले हो सकते हैं;) चीयर्स – metakungfu

+0

वूप्स! :) उस कॉपी और पेस्ट को देखना होगा! – fatfrog

2

मुझे एक ही समस्या है । मैंने इसे अपने तैनाती में जोड़ा है।rb (विकल्प '--trace' जोड़ने के लिए):

*** [err :: my-server] ** Invoke assets:precompile (first_time) 
... 
1

यहाँ क्या मेरे लिए काम किया:

namespace :deploy do 
    namespace :assets do 
    task :precompile, :roles => :web, :except => { :no_release => true } do 
     run "cd #{current_path} && #{rake} RAILS_ENV=#{rails_env} RAILS_GROUPS=assets assets:precompile --trace" 
    end 
    end 
end 

और त्रुटि अभी यह सूचना प्रतीत हो रहा है

1) जोड़े rvm-Capistrano

require 'rvm/capistrano' 
set :rvm_ruby_string, '1.9.2' # Set to your version number 
01: confg में अपने Gemfile

2) करने के लिए/तैनात, पंक्तियाँ जोड़ें

3) आपको यह भी सेट करने की आवश्यकता हो सकती है: rvm_type और: rvm_bin_path। this Ninjahideout blog देखें जो अधिक जानकारी में जाता है।

4) apt-get/यम अपने सर्वर

पर NodeJS स्थापित (यह related Stackoverflow question को मेरा जवाब देखें।)

0

संदेश आप देख rake assets:precompile का उत्पादन होता है।

जब आप rake assets:precompile, डिफ़ॉल्ट उत्पादन से बचने के लिए कैसे

को

समाधान है -q behand अपने आदेश, जोड़ने

विश्लेषण, नीचे है अगर आप देखना चाहते हैं चलाएँ:

# :gem_path/actionpack/lib/sprockets/assets.rake 
namespace :assets do 

    # task entry, it will call invoke_or_reboot_rake_task 
    task :precompile do 
    invoke_or_reboot_rake_task "assets:precompile:all" 
    end 

    # it will call ruby_rake_task 
    def invoke_or_reboot_rake_task(task) 
    ruby_rake_task task 
    end 

    # it will call ruby 
    def ruby_rake_task(task, fork = true) 
    env = ENV['RAILS_ENV'] || 'production' 
    groups = ENV['RAILS_GROUPS'] || 'assets' 
    args = [$0, task,"RAILS_ENV=#{env}","RAILS_GROUPS=#{groups}"] 
    ruby(*args) 
    end 
end 

# :gem_path/rake/file_utils.rb 
module FileUtils 

    # it will call sh 
    def ruby(*args,&block) 
    options = (Hash === args.last) ? args.pop : {} 
    sh(*([RUBY] + args + [options]), &block) 
    end 

    # it will call set_verbose_option 
    # and if options[:verbose] == true, it do not output cmd 
    # but default of options[:verbose] is an object 
    def sh(*cmd, &block) 
    # ... 
    set_verbose_option(options) 
    # ... 
    Rake.rake_output_message cmd.join(" ") if options[:verbose] 
    # ... 
    end 

    # default of options[:verbose] is Rake::FileUtilsExt::DEFAULT, which is an object 
    def set_verbose_option(options) # :nodoc: 
    unless options.key? :verbose 
     options[:verbose] = 
     Rake::FileUtilsExt.verbose_flag == Rake::FileUtilsExt::DEFAULT || 
     Rake::FileUtilsExt.verbose_flag 
    end 
    end 
end 

# :gem_path/rake/file_utils_ext.rb 
module Rake 
    module FileUtilsExt 
    DEFAULT = Object.new 
    end 
end 

# :gem_path/rake/application.rb 
      # the only to solve the disgusting output when run `rake assets:precompile` 
      # is add a `-q` option. 
      ['--quiet', '-q', 
      "Do not log messages to standard output.", 
      lambda { |value| Rake.verbose(false) } 
      ], 
      ['--verbose', '-v', 
      "Log message to standard output.", 
      lambda { |value| Rake.verbose(true) } 
      ], 
संबंधित मुद्दे