Приложение My Rails 4.1.8 не работает в производстве. Когда я развертываю новую версию своего приложения по какой-то нечетной причине, все моих активов повторно отпечатываются, даже когда активы не изменились. Это по существу разрывает кеш для всех активов при каждом развертывании. Очевидно, что это побеждает одну из целей использования конвейера активов в первую очередь.Компиляция активов Rails в производстве генерирует новые отпечатки пальцев при каждом развертывании, даже если файл не был изменен.
Я использую:
- Rails 4.1.8, Ruby 2.2.2
- Capistrano 3.4 для развертывания.
- звездочки рельсы 2.3.1
Выдержка из production.rb:
config.assets.digest = true
config.serve_static_assets = true
конфигурации/инициализаторах/assets.rb
Rails.application.config.assets.version = '1.0'
Capfile
require 'capistrano/setup'
require 'capistrano/deploy'
require 'capistrano/bundler'
require 'capistrano/rbenv'
require 'capistrano/rails/assets'
require 'capistrano/rails/migrations'
set :rbenv_type, :user
set :rbenv_ruby, '2.2.2'
/конфи г/deploy.rb
lock '3.4'
set :application, 'myapp'
set :repo_url, '[email protected]:user/app.git'
set :deploy_to, '/home/deploy/app'
set :linked_dirs, fetch(:linked_dirs, []).push('log', 'tmp/pids', 'tmp/cache', 'tmp/sockets', 'tmp/uploads', 'vendor/bundle', 'public/system')
set :bundle_binstubs, nil
set :keep_releases, 5
SSHKit.config.command_map[:rake] = 'bundle exec rake'
SSHKit.config.command_map[:rails] = 'bundle exec rails'
namespace :deploy do
desc 'Restart application'
task :restart do
on roles(:app), in: :sequence, wait: 5 do
within "#{release_path}" do
execute :bundle, "exec thin restart -O -C /etc/thin/app.yml"
end
end
end
after :publishing, :restart
При развертывании:
Me$: bin/cap production deploy
...
DEBUG [ff4ce05c] Running /usr/bin/env if test ! -d /home/deploy/app/releases/20150618015809; then echo "Directory does not exist '/home/deploy/app/releases/20150618015809'" 1>&2; false; fi as [email protected]
DEBUG [ff4ce05c] Command: if test ! -d /home/deploy/app/releases/20150618015809; then echo "Directory does not exist '/home/deploy/app/releases/20150618015809'" 1>&2; false; fi
DEBUG [ff4ce05c] Finished in 0.370 seconds with exit status 0 (successful).
INFO [4ab0f9c7] Running ~/.rbenv/bin/rbenv exec bundle exec rake assets:precompile as [email protected]
DEBUG [4ab0f9c7] Command: cd /home/deploy/app/releases/20150618015809 && (RBENV_ROOT=~/.rbenv RBENV_VERSION=2.2.2 RAILS_ENV=staging ~/.rbenv/bin/rbenv exec bundle exec rake assets:precompile)
DEBUG [4ab0f9c7] I, [2015-06-18T01:58:31.892846 #16404] INFO -- : Writing /home/deploy/app/releases/20150618015809/public/assets/proximanova-bold-7c9c7de5d4c12790ac074e1c15637315.eot
DEBUG [4ab0f9c7] I, [2015-06-18T01:58:31.894641 #16404] INFO -- : Writing /home/deploy/app/releases/20150618015809/public/assets/proximanova-bold-8252ebfc2dfe42e154d8e8bcedbfd2f6.svg
DEBUG [4ab0f9c7] I, [2015-06-18T01:58:31.896158 #16404] INFO -- : Writing /home/deploy/app/releases/20150618015809/public/assets/proximanova-bold-cf546ab4766383966d7b70bd2749c011.ttf
DEBUG [4ab0f9c7] I, [2015-06-18T01:58:31.897666 #16404] INFO -- : Writing /home/deploy/app/releases/20150618015809/public/assets/proximanova-bold-4bafadbafe1d7f0915ef05f107e97a25.woff
DEBUG [4ab0f9c7] I, [2015-06-18T01:58:31.899064 #16404] INFO -- : Writing /home/deploy/app/releases/20150618015809/public/assets/proximanova-bold-3b37298fc9eb69093953f9885e889090.woff2
...
Тогда я бегу во второй раз (без изменения каких-либо активов)
Me$: bin/cap production deploy
...
DEBUG [cbbe9a55] Running /usr/bin/env if test ! -d /home/deploy/app/releases/20150618020326; then echo "Directory does not exist '/home/deploy/app/releases/20150618020326'" 1>&2; false; fi as [email protected]
DEBUG [cbbe9a55] Command: if test ! -d /home/deploy/app/releases/20150618020326; then echo "Directory does not exist '/home/deploy/app/releases/20150618020326'" 1>&2; false; fi
DEBUG [cbbe9a55] Finished in 0.369 seconds with exit status 0 (successful).
INFO [6e1eeadf] Running ~/.rbenv/bin/rbenv exec bundle exec rake assets:precompile as [email protected]
DEBUG [6e1eeadf] Command: cd /home/deploy/app/releases/20150618020326 && (RBENV_ROOT=~/.rbenv RBENV_VERSION=2.2.2 RAILS_ENV=staging ~/.rbenv/bin/rbenv exec bundle exec rake assets:precompile)
DEBUG [6e1eeadf] I, [2015-06-18T02:03:48.365574 #16929] INFO -- : Writing /home/deploy/app/releases/20150618020326/public/assets/proximanova-bold-78ec1c34931362f5fc9d1c64477d075f.eot
DEBUG [6e1eeadf] I, [2015-06-18T02:03:48.367236 #16929] INFO -- : Writing /home/deploy/app/releases/20150618020326/public/assets/proximanova-bold-6fadee20c88b51ed286db9687b131999.svg
DEBUG [6e1eeadf] I, [2015-06-18T02:03:48.368709 #16929] INFO -- : Writing /home/deploy/app/releases/20150618020326/public/assets/proximanova-bold-dc42499d91c401ef2e3452caa1917adf.ttf
DEBUG [6e1eeadf] I, [2015-06-18T02:03:48.370105 #16929] INFO -- : Writing /home/deploy/app/releases/20150618020326/public/assets/proximanova-bold-2d17c273eabf9ce851993897dd1fb300.woff
DEBUG [6e1eeadf] I, [2015-06-18T02:03:48.371464 #16929] INFO -- : Writing /home/deploy/app/releases/20150618020326/public/assets/proximanova-bold-7562093954d44696b2df7ada1488e2da.woff2
...
Очевидно, что все активы были повторной отпечатки пальцев, которые не должны иметь место.
Если я вхожу в сервере, удалите все активы в/государственных/активов и выполнить следующую команду:
RBENV_ROOT=~/.rbenv RBENV_VERSION=2.2.2 RAILS_ENV=production ~/.rbenv/bin/rbenv exec bundle exec rake assets:precompile
активы составлены правильно. Если я снова запустил ту же команду, активы не будут восстановлены, что снова будет правильным. Просто не может показаться, что правильное поведение при развертывании через Capistrano.
Возможно, что-то явно вписано в конфигурацию, но до сих пор я не смог его сузить, несмотря на множество параметров конфигурации, с которыми я экспериментировал.
Любые идеи Rails gurus?
На моем сервере производства, я бегу md5sum акций/общество/активы/заполнитель - * и SVG получаем следующее: ** 61b0d2602c44b013bebb40c6fa49d7f8 ** Заполнитель-2779b2aa00e0c53f6a9d47f537d501dc.svg ** 61b0d2602c44b013bebb40c6fa49d7f8 ** замещающий-40c13c5ef3e93065791d60c5e749a922 .svg. Это два релиза с отпечатками отпечатков пальцев, но с той же контрольной суммой. И на моем Dev поле, я бегу md5 заполнитель - * и SVG получаем следующее:. MD5 (приложение/активы/изображения/placeholder.svg) = ** 61b0d2602c44b013bebb40c6fa49d7f8 ** суммы совпадают и, следовательно, нет различия между файлами , Неудивительно. – Jaybloke
Привет @will_in_wi. Просто заметил что-то своеобразное. В config/initializers/assets.rb у меня есть строка по умолчанию ** Rails.application.config.assets.version = '1.0' **. Если я войду на свой производственный сервер и запустил консоль рельсов, я вижу, что ** Rails.application.config.assets.version ** дает ** 1.0-ART-4cbf7519e09d7920d6e60433d95de054 **. И контрольная сумма изменяется при каждом развертывании, даже если никакие активы не изменились. Кажется, что кэш разоряется при каждом развертывании. Посмотрел источник sprockets, но в соответствии с тестами версия активов должна быть равна тому, на что она была установлена, в данном случае «1.0». – Jaybloke