Удаленное редактирование компаса /sass через sftp/scp с альтернативным портом
Я пытаюсь заставить compass/sass наблюдать за изменениями на моем локальном компьютере и отражать эти изменения удаленно, используя специальный скрипт config.rb. net::sftp
работает, но мой сервер требует пользовательский порт SSH. Я не мог найти модов, чтобы заставить sftp работать с альтернативным портом, так что я пытаюсь net:scp
Теперь проблема в том, что я не знаю правильную структуру команд для загрузки с использованием net: scp и хотел посмотреть, сможет ли кто-нибудь мне помочь. Вот мой код:
# Require any additional compass plugins here.
require 'net/ssh'
require 'net/scp'
# SFTP Connection Details - Does not support alternate ports os SSHKeys, but could with mods
remote_theme_dir_absolute = '/home2/trinsic/public_html/scottrlarson.com/sites/all/themes/ gateway_symbology_zen/css'
sftp_host = 'xxx.xxx.xxx.xxx' # Can be an IP
sftp_user = 'user' # SFTP Username
sftp_pass = 'password' # SFTP Password
# Callback to be used when a file change is written. This will upload to a remote WP install
on_stylesheet_saved do |filename|
$local_path_to_css_file = css_dir + '/' + File.basename(filename)
Net::SSH.start( sftp_host, sftp_user, {:password => sftp_pass,:port => 2222} ) do ssh.scp.upload! $local_path_to_css_file, remote_theme_dir_absolute + '/' + File.basename(filename)
end
puts ">>>> Compass is polling for changes. Press Ctrl-C to Stop"
end
#
# This file is only needed for Compass/Sass integration. If you are not using
# Compass, you may safely ignore or delete this file.
#
# If you'd like to learn more about Sass and Compass, see the sass/README.txt
# file for more information.
#
# Change this to :production when ready to deploy the CSS to the live server.
environment = :development
#environment = :production
# In development, we can turn on the FireSass-compatible debug_info.
firesass = false
#firesass = true
# Location of the theme's resources.
css_dir = "css"
sass_dir = "sass"
extensions_dir = "sass-extensions"
images_dir = "images"
javascripts_dir = "js"
# Require any additional compass plugins installed on your system.
#require 'ninesixty'
#require 'zen-grids'
# Assuming this theme is in sites/*/themes/THEMENAME, you can add the partials
# included with a module by uncommenting and modifying one of the lines below:
#add_import_path "../../../default/modules/FOO"
#add_import_path "../../../all/modules/FOO"
#add_import_path "../../../../modules/FOO"
##
## You probably don't need to edit anything below this.
##
# You can select your preferred output style here (can be overridden via the command line):
# output_style = :expanded or :nested or :compact or :compressed
output_style = (environment == :development) ? :expanded : :compressed
# To enable relative paths to assets via compass helper functions. Since Drupal
# themes can be installed in multiple locations, we don't need to worry about
# the absolute path to the theme from the server root.
relative_assets = true
# To disable debugging comments that display the original location of your selectors. Uncomment:
# line_comments = false
# Pass options to sass. For development, we turn on the FireSass-compatible
# debug_info if the firesass config variable above is true.
sass_options = (environment == :development && firesass == true) ? {:debug_info => true} : {}
Я получаю сообщение об ошибке при запуске команды: compass watch:
NoMethodError on line ["17"] of K: undefined method `upload!' for #<Net::SSH::Co
nnection::Session:0x000000036bb220>
Run with --trace to see the full backtrace
1 ответ
Мне тоже нужно было найти решение, но нигде не нашел удовлетворительного ответа. Прочитав документацию по Ruby Net::ssh и некоторый источник Compass, я решил загрузить CSS и исходную карту на удаленный SSH-сервер с нестандартным портом и принудительной авторизацией с открытым ключом:
Сначала убедитесь, что у вас установлены необходимые драгоценные камни
sudo gem install net-ssh net-sftp
затем добавьте это в ваш config.rb
# Add this to the first lines of your config.rb
require 'net/ssh'
require 'net/sftp'
...
# Your normal compass config comes here
...
# At the end of your config.rb add the config for the upload code
remote_theme_dir_absolute = '/path/to/my/remote/stylesheets'
sftp_host = 'ssh_host' # Can be an IP
sftp_user = 'ssh_user' # SFTP Username
on_stylesheet_saved do |filename|
# You can use the ssh-agent for authorisation.
# In this case you can remove the :passphrase from the config and set :use_agent => true.
Net::SFTP.start(
sftp_host,
sftp_user ,
:port => 10022,
:keys_only => true,
:keys => ['/path/to/my/private/id_rsa'],
:auth_methods => ['publickey'],
:passphrase => 'my_secret_passphrase',
:use_agent => false,
:verbose => :warn
) do |sftp|
puts sftp.upload! css_dir + '/app.css', remote_theme_dir_absolute + '/' + 'app.css'
end
end
on_sourcemap_saved do |filename|
# You can use the ssh-agent for authorisation.
# In this case you can remove the :passphrase from the config and set :use_agent true.
Net::SFTP.start(
sftp_host,
sftp_user ,
:port => 10022,
:keys_only => true,
:keys => ['/path/to/my/private/id_rsa'],
:auth_methods => ['publickey'],
:passphrase => 'my_secret_passphrase',
:use_agent => false,
:verbose => :warn
) do |sftp|
puts sftp.upload! css_dir + '/app.css.map', remote_theme_dir_absolute + '/' + 'app.css.map'
end
end
Было довольно много проб и ошибок, пока это не сработало для меня. Некоторые точки отказа были:
- Если ssh-agent недоступен, соединение не будет установлено, пока вы не настроите
:ssh_agent => false
эксплицитно - Если вы не ограничите доступные ключи ключами:keys, все доступные ключи будут опробованы одна за другой. Если вы используете ssh-agent и у вас установлено более 3 ключей, значит, высокая вероятность того, что удаленный сервер закроет соединение, если вы попытаетесь использовать слишком много ключей, которые недопустимы для сервера, к которому вы подключены в данный момент.
- Для любой проблемы с подключением установите уровень детализации
:verbose => :debug
чтобы увидеть, что происходит. Не забудьте остановитьcompass watch
и перезапустите, чтобы убедиться, что изменения конфигурации применяются.