папка с ресурсами автоматически создается внутри общедоступной при развертывании с помощью capistrano 3

У меня нет папки с ресурсами в каталоге public (public/assets) моего приложения. Когда я пытаюсь выполнить развертывание с помощью capistrano v3. На моем удаленном компьютере создается новая папка с именем public/assets. Я также получаю следующую ошибку, потому что она ищет файл с именем manifest.yml в разделе public/assets(public/assets/manifest*). Это необходимо?? С какой целью это???

//getting the following error while deploying
DEBUG [014a40e4] Running /usr/bin/env [ -L /home/ec2-user/capistrano-3/my_app/releases/20140117124107/public/assets ] on 50.13.220.55
DEBUG [014a40e4] Command: [ -L /home/ec2-user/capistrano-3/my_app/releases/20140117124107/public/assets ]
DEBUG [014a40e4] Finished in 0.602 seconds with exit status 1 (failed).
DEBUG [9c5901ab] Running /usr/bin/env [ -d /home/ec2-user/capistrano-3/my_app/releases/20140117124107/public/assets ] on 50.13.220.55
DEBUG [9c5901ab] Command: [ -d /home/ec2-user/capistrano-3/my_app/releases/20140117124107/public/assets ]
DEBUG [9c5901ab] Finished in 0.639 seconds with exit status 1 (failed).

//// эта ошибка находится в конце трассировки

** Вызовите deploy:assets:backup_manifest (first_time)

** Выполнить развертывание: активы: резервная копия_манифеста

DEBUG [a08f4c02]    cp: 
DEBUG [a08f4c02]    cannot stat `/home/ec2-user/capistrano-3/my_app/releases/20140117064709/public/assets/manifest*'
DEBUG [a08f4c02]    : No such file or directory
DEBUG [a08f4c02]    
cap aborted!
cp stdout: Nothing written
cp stderr: Nothing written

Tasks: TOP => deploy:assets:backup_manifest
The deploy has failed with an error: #<SSHKit::Command::Failed: cp stdout: Nothing written
cp stderr: Nothing written
>
** Invoke deploy:failed (first_time)
** Execute deploy:failed

person Sam    schedule 20.01.2014    source источник


Ответы (2)


Судя по всему, вы, вероятно, используете в своем приложении версию рельсов 3.1 или выше.

Собственно, из руководства:

Конвейер ресурсов предоставляет платформу для объединения и минимизации или сжатия ресурсов JavaScript и CSS. Он также добавляет возможность писать эти активы на других языках, таких как CoffeeScript, Sass и ERB.

Вот все, что вам нужно знать: http://guides.rubyonrails.org/asset_pipeline.html

Как упоминалось в руководстве, вы можете отключить его, поместив/изменив следующий код в файле config/application.rb:

config.assets.enabled = false

Если вы продолжаете использовать конвейер ресурсов, вы можете предварительно скомпилировать свои ресурсы с помощью этой команды:

rake assets:precompile
# or
rake assets:precompile:all

Про манифест.yml (из самого гайда):

Задача rake также генерирует файл manifest.yml, содержащий список всех ваших активов и их соответствующих отпечатков пальцев. Это используется вспомогательными методами Rails, чтобы избежать передачи запросов на сопоставление обратно в Sprockets. Типичный файл манифеста выглядит так:

---
rails.png: rails-bd9ad5a560b5a3a7be0808c5cd76a798.png
jquery-ui.min.js: jquery-ui-7e33882a28fc84ad0e0e47e46cbf901c.min.js
jquery.min.js: jquery-8a50feed8d29566738ad005e19fe1c2d.min.js
application.js: application-3fdab497b8fb70d20cfc5495239dfc29.js
application.css: application-8af74128f904600e41a6e39241464e03.css

Итак, когда вы запускаете задачу rake. Он сгенерирует файл menifest.yml, в котором есть записи ваших активов, включая хеш-дайджест md5, который используется для кэширования ваших активов на уровне клиента. Каждый раз, когда вы запускаете задачу rake, вы получаете новый хеш для своих активов. Который проверяет/аннулирует ваши активы, когда браузер получает ответ от сервера.

Я рекомендую вам использовать конвейер ресурсов, так как это также даст вам возможность использовать CDN гораздо более удобным и простым способом. Однако, в конце концов, это ваш выбор.

ОБНОВЛЕНИЕ: для развертывания в capistrano 3 (поскольку в capistrano 3 много изменений DSL) поставляется: require 'capistrano/deploy' внутри Capfile. Таким образом, вам не нужно писать собственную задачу precompile_assets для развертывания.

Взгляните на этот ответ: https://stackoverflow.com/a/15690628/645886, и это: http://blog.blenderbox.com/2013/11/06/precompiling-assets-with-capistrano-3-0-1/. Надеюсь, это поможет.

person Surya    schedule 20.01.2014
comment
@Surya- ваше содержание очень полезно. спасибо. Когда я запускаю активы rake: precompile создается папка манифеста. Но когда я запускаю cap development deploy --trace, я снова получаю ту же ошибку. Обновил ошибку в моем вопросе. Я развертываю из локальной среды в среду разработки ec2. - person Sam; 21.01.2014

Это стандартная функциональность Rails в Asset Pipeline. Прочитайте это для лучшего понимания. Конвейер ресурсов

Конвейер ресурсов предоставляет платформу для объединения и минимизации или сжатия ресурсов JavaScript и CSS. Он также добавляет возможность писать эти активы на других языках, таких как CoffeeScript, Sass и ERB.

Когда вы запускаете приложение rails в производственной среде, медиа-контент, присутствующий в приложении/активах, компилируется, и несколько файлов объединяются в один для более быстрой загрузки ресурсов.

Вы можете проверить файл config/application.rb.config.assets.enabled = true

Это включает конвейерную обработку активов.

Когда происходит предварительная компиляция ресурсов, они помещаются в папку public/assets, а запись обновляется в файле manifest.yml.

Приложение Rails по умолчанию будет искать ресурсы в папке public/assets. Активы не компилируются снова, если не было сделано никаких изменений. Вы можете либо скомпилировать ресурсы, используя: rake assets:precompile, либо при перезапуске сервера они будут скомпилированы автоматически. Для компиляции js должен присутствовать компилятор js, например node.js или rubyracer.

Если вы хотите избежать компиляции, отключите ее из application.rb и укажите путь к вашим ресурсам для производственной среды. В режиме разработки активы обслуживаются из app/assets. Вы также можете попробовать запустить rake assets:precompile и проверить, создана ли общедоступная папка ресурсов.

person Bijendra    schedule 20.01.2014
comment
@GhostRider - ваш контент очень полезен. Благодарю. Когда я запускаю rake assets:precompile, создается папка манифеста. Но когда я запускаю cap development deploy --trace, я снова получаю ту же ошибку. Обновил ошибку в моем вопросе. Я развертываю из локальной среды в среду разработки ec2. - person Sam; 21.01.2014