Tôi chạy bundle update
và cập nhật sprockets
thành 3.0.0.Capistrano 3 + Sprockets 3 + Rails 4.2.1 sẽ không triển khai?
Khi tôi cố gắng triển khai qua Capistrano 3 tôi nhận được lỗi sau:
INFO [e54ac5ca] Running /usr/bin/env cp /var/www/testapp/releases/20150414002210/public/assets/manifest* /var/www/testapp/releases/20150414002210/assets_manifest_backup as [email protected]
DEBUG [e54ac5ca] Command: cd /var/www/testapp/releases/20150414002210 && /usr/bin/env cp /var/www/testapp/releases/20150414002210/public/assets/manifest* /var/www/testapp/releases/20150414002210/assets_manifest_backup
DEBUG [e54ac5ca] cp: cannot stat ‘/var/www/testapp/releases/20150414002210/public/assets/manifest*’
DEBUG [e54ac5ca] : No such file or directory
DEBUG [d2c5a990] cp: cannot stat ‘/var/www/testapp/releases/20150414002210/public/assets/manifest*’
DEBUG [d2c5a990] : No such file or directory
cap aborted!
SSHKit::Runner::ExecuteError: Exception while executing as [email protected]: cp exit status: 1
cp stdout: Nothing written
cp stderr: cp: cannot stat ‘/var/www/testapp/releases/20150414002210/public/assets/manifest*’: No such file or directory
/Users/HomeHome/.rvm/gems/ruby-2.1.3/gems/sshkit-1.7.1/lib/sshkit/runners/parallel.rb:16:in `rescue in block (2 levels) in execute'
/Users/HomeHome/.rvm/gems/ruby-2.1.3/gems/sshkit-1.7.1/lib/sshkit/runners/parallel.rb:12:in `block (2 levels) in execute'
SSHKit::Command::Failed: cp exit status: 1
cp stdout: Nothing written
cp stderr: cp: cannot stat ‘/var/www/testapp/releases/20150414002210/public/assets/manifest*’: No such file or directory
/Users/HomeHome/.rvm/gems/ruby-2.1.3/gems/sshkit-1.7.1/lib/sshkit/command.rb:95:in `exit_status='
/Users/HomeHome/.rvm/gems/ruby-2.1.3/gems/sshkit-1.7.1/lib/sshkit/backends/netssh.rb:179:in `block in _execute'
/Users/HomeHome/.rvm/gems/ruby-2.1.3/gems/sshkit-1.7.1/lib/sshkit/backends/netssh.rb:133:in `tap'
/Users/HomeHome/.rvm/gems/ruby-2.1.3/gems/sshkit-1.7.1/lib/sshkit/backends/netssh.rb:133:in `_execute'
/Users/HomeHome/.rvm/gems/ruby-2.1.3/gems/sshkit-1.7.1/lib/sshkit/backends/netssh.rb:66:in `execute'
/Users/HomeHome/.rvm/gems/ruby-2.1.3/gems/capistrano-rails-1.1.2/lib/capistrano/tasks/assets.rake:68:in `block (5 levels) in <top (required)>'
/Users/HomeHome/.rvm/gems/ruby-2.1.3/gems/sshkit-1.7.1/lib/sshkit/backends/abstract.rb:77:in `within'
/Users/HomeHome/.rvm/gems/ruby-2.1.3/gems/capistrano-rails-1.1.2/lib/capistrano/tasks/assets.rake:67:in `block (4 levels) in <top (required)>'
/Users/HomeHome/.rvm/gems/ruby-2.1.3/gems/sshkit-1.7.1/lib/sshkit/backends/netssh.rb:54:in `instance_exec'
/Users/HomeHome/.rvm/gems/ruby-2.1.3/gems/sshkit-1.7.1/lib/sshkit/backends/netssh.rb:54:in `run'
/Users/HomeHome/.rvm/gems/ruby-2.1.3/gems/sshkit-1.7.1/lib/sshkit/runners/parallel.rb:13:in `block (2 levels) in execute'
Tasks: TOP => deploy:assets:backup_manifest
(See full trace by running task with --trace)
The deploy has failed with an error: #<SSHKit::Runner::ExecuteError: Exception while executing as [email protected]: cp exit status: 1
cp stdout: Nothing written
cp stderr: cp: cannot stat ‘/var/www/testapp/releases/20150414002210/public/assets/manifest*’: No such file or directory
Tôi đã nhìn khắp nơi để mọi người có thể có vấn đề tương tự và có vẻ như không có vấn đề hoặc ý kiến về nó bất cứ nơi nào ...
Thành thật mà nói, tôi thậm chí không chắc chắn cách sprockets
, sprockets-rails
có liên quan đến đường ray. Đó là tất cả khá khó hiểu với tôi ... ví dụ, mặc định Gemfile
mà đi kèm với một ứng dụng Rails 4.2.1
tươi nói sprockets 3.0.0 được cho phép trong Gemfile.lock
, nhưng khi bạn đi đến sprockets 2-> 3 hướng dẫn nâng cấp, nó cho thấy rằng //= include
đã bị xóa, nhưng nó nằm ngay trong tệp application.js
.
Vì vậy, có thể tôi thiếu điều gì đó, nhưng tôi không hoàn toàn chắc chắn cách giải quyết vấn đề này.
Trên thực tế bạn không cần phải tiền biên dịch tài sản tại địa phương và cam kết chúng vào kho sau đó. Đó là một lỗi và những tên tuổi capistrano đang làm việc với nó ngay bây giờ: https://github.com/capistrano/rails/pull/112 & https://github.com/capistrano/rails/issues/111 anyway , đưa ra câu trả lời chi tiết như vậy! –
Ồ, thông tin tốt, cảm ơn. Khi triển khai với capistrano, tôi luôn thích chiến lược triển khai sử dụng _deploy branch_ hơn, để "các cam kết nội dung được biên dịch" sẽ không gây ô nhiễm _master_ của bạn. Ngoài ra, thường xuyên hơn không bạn sẽ triển khai vào một cụm máy chủ, và tôi thấy nó không hiệu quả để biên dịch chúng một lần nữa và một lần nữa trên mỗi máy chủ mà bạn triển khai. Ngoài ra, biên dịch trước chúng cục bộ giúp dễ dàng tự động hóa (trong nhiệm vụ triển khai giới hạn) tải chúng lên CDN. – tompave
Để mở rộng nhận xét từ @mid, điều đã xảy ra là xích 3.0.0 [đã giới thiệu thay đổi] (https://github.com/rails/sprockets/commit/ce6508e8540f829c6221afa39fdf718e4dded096) nơi đổi tên tệp kê khai từ manifest.json tới .sprockets-manifest.json. Chúng tôi đang trong quá trình cập nhật capistrano-ray để kiểm tra cả tên tệp và sử dụng bất kỳ tên tệp nào tìm thấy. –