-
-
25 Jun 2013 11:08:06 UTC
- Distribution: lib-remote
- Module version: 0.11
- Source (raw)
- Browse (raw)
- Changes
- How to Contribute
- Issues (1)
- Testers (85 / 437 / 0)
- Kwalitee
Bus factor: 1- 25.58% Coverage
- License: perl_5
- Perl: v5.6.0
- Activity
24 month- Tools
- Download (10.44KB)
- MetaCPAN Explorer
- Permissions
- Subscribe to distribution
- Permalinks
- This version
- Latest version
and 1 contributors- Mikhail Che <mche#cpan.org>
- Dependencies
- LWP::UserAgent
- and possibly others
- Reverse dependencies
- CPAN Testers List
- Dependency graph
- VERSION
- ПРИВЕТСТВИЕ SALUTE
- NAME
- FAQ
- SYNOPSIS
- EXPORT
- SUBROUTINES/METHODS
- Требования REQUIRES
- Пример конфига для NGINX, раздающего модули:
- AUTHOR
- BUGS
- SUPPORT
- ACKNOWLEDGEMENTS
- SEE ALSO
- LICENSE AND COPYRIGHT
- DISTRIB
VERSION
Version 0.11
ПРИВЕТСТВИЕ SALUTE
Доброго всем! Доброго здоровья! Доброго духа!
Hello all! Nice health! Good thinks!
NAME
lib::remote - pragma, functional and object interface for load and use/require modules from remote sources without installation basically throught protocols like http (LWP). One dispather on @INC -
push @INC, sub {};
This dispather will return filehandle for downloaded content of a module from remote server.lib::remote - Удаленная загрузка и использование модулей. Загружает модули с удаленного сервера. Только один диспетчер в @INC-
push @INC, sub {...};
. Диспетчер возвращает filehandle для контента, полученного удаленно. Смотреть perldoc -f require.Идея из "http://forum.codecall.net/topic/64285-perl-use-modules-on-remote-servers/"
Кто-то еще стырил "http://www.linuxdigest.org/2012/06/use-modules-on-remote-servers/" (поздняя дата и есть ошибки)
FAQ
Q: Зачем? Why?
A: За лосем. For elk.
Q: Почему? And so why?
A: По кочану. For head of cabbage.
Q: Как? How?
A: Да вот так. Da vot tak.
SYNOPSIS
Все просто. По аналогии с локальным вариантом:
use lib '/to/any/local/lib';
указываем урл:
# pragma interface at compile time use lib::remote 'http://<хост(host)>/site-perl/.../'; use My::Module1; ...
Искомый модуль будет запрашиваться как в локальном варианте, дописывая в конце URL: http://<хост(host)>/site-perl/.../My/Module1.pm
Допустим, УРЛ сложнее, не содержит имени модуля или используются параметры: https://<хост>/.../?key=ede35ac1208bbf479&...
Тогда делаем пары ключ->значение, указывая КОНКРЕТНЫЙ урл для КОНКРЕТНОГО модуля, например:
use lib::remote 'Some::Module1'=>'https://<хост>/.../?key=ede35ac1208bbf479&...', 'SomeModule2'=>'ssh://user:pass@host:/..../SomeModule2.pm', ; #use Some::Module1; не нужно, уже сделано require (см. "Опцию [require] расширенного синтаксиса") use SomeModule2 qw(func1 func2), [<what ever>, ...];# только, если нужно что-то импортировать очень сложное (см. "Опцию [import] расширенного синтаксиса") use parent 'Some::Module1'; # такое нужно ...
Внимание
Конкретно указанный модуль (через пару) будет искаться сначала в своем урл, а потом во всех заданных урлах глобального конфига.
При многократном вызове use lib::remote все параметры и урлы сохраняются, аналогично use lib '';, но естественно не в @INC. Повторюсь, в @INC помещается только один диспетчер.
Расширенный синтаксис Extended syntax
Pragma variant
use lib::remote # global config for modules unless them have its own 'http://....', # push to search list urls ['http://....', opt1 =>..., opt2 =>..., ....], # push to search list urls {url=>'http://....', opt1 =>..., opt2 =>..., ....}, # push to search list urls
and per module personal options
'Some::Module1'=> 'http://....', 'Some::Module2'=>['http://...', opt1 =>..., opt2 =>..., ....], 'Some::Module3'=>{url => 'http://...', opt1 =>..., opt2 =>..., ....}, 'SomeModule1'=>['ssh://user@host:/..../SomeModule2.pm', 'pass'=>..., ...], 'SomeModule2'=>{url => 'ssh://user@host:/..../SomeModule2.pm', 'pass'=>..., ...}, ;
Functional variant - is runtime and you cant import symbols
use lib::remote; my $conf = lib::remote->config('http://....'); # DONT WORK -> lib::remote::module('Foo::'); # OK lib::remote->module('Foo::One'=>'http://...', )::foo(...);
Object variant - is runtime and you cant import symbols
use lib::remote; my $dispatcher = lib::remote->new(<list options>); my $foo2 = $dispatcher->module('Foo::Two')->new();
Опции Options
Не трудно догадаться, что вычленение пар в общем списке import/config происходит по специфике URI.
url => '>schema://>...' Это основной параметр. На уровне глобальной конфигурации сохраняется список всех урлов, к которым добавляется путь Some/Module.pm
url_suffix
charset => 'utf8', Задать кодировку урла. Если веб-сервер правильно выдает
Content-Type: ...; charset=utf8
, тогда не нужно, ->decoded_content сработает. Помнить проuse utf8;
require => 1|0 Cрабатывает require Some::Module1; Поэтому не нужно делать строку use|require Some::Module;, если только нет хитрых импортов (см. опцию import ниже)
import => [qw(), ...]. The import spec for loaded module. Disadvantage!!! Work on list of scalars only!!! Просто вызывается Some::Module1->import(...);
cache => 1|0 Content would be cached
debug => 0|1 warn messages
что еще?
Можно многократно вызывать use lib::remote ...; и тем самым изменять настройки модулей и глобальные опции.
Url может возвращать сразу пачку модулей (package). В этом случае писать ключом один модуль и дополнительно вызывать use/require для остальных модулей.
EXPORT
Ничего не экспортируется.
SUBROUTINES/METHODS
This is runtime.
new(<options list>) Create lib::remote object and apply/merge options. All created objects are one variable.
module(<options list>) Try to load and require modules. Return the name of first parsed module in list of options.
config(<options list>) Apply/merge options to lib::remote package.
Требования REQUIRES
Если урлы 'http://...', 'https://...', 'ftp://...', 'file://...', то нужен LWP::UserAgent
Если 'ssh://...' - TODO
Пример конфига для NGINX, раздающего модули:
... server { listen 81; # server_name localhost; location / { charset utf-8; charset_types *; root /home/perl/lib-remote/; index index.html index.htm; } } ...
AUTHOR
Mikhail Che,
<m[пёсик]cpan.org>
BUGS
Пишите.
Please report any bugs or feature requests to
bug-lib-remote at rt.cpan.org
, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=lib-remote. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.SUPPORT
You can find documentation for this module with the perldoc command.
perldoc lib::remote
You can also look for information at:
RT: CPAN's request tracker (report bugs here)
AnnoCPAN: Annotated CPAN documentation
CPAN Ratings
Search CPAN
ACKNOWLEDGEMENTS
Не знаю.
SEE ALSO
perldoc -f require.
Глянь PAR
Глянь Remote::Use
Глянь lib::http
Глянь lib::DBI
LICENSE AND COPYRIGHT
Copyright 2012-2013 Mikhail Che.
This program is free software; you can redistribute it and/or modify it under the terms of either: the GNU General Public License as published by the Free Software Foundation; or the Artistic License.
See http://dev.perl.org/licenses/ for more information.
DISTRIB
$ module-starter --module=lib::remote --author=”Mikhail Che” --email=”m.che@cpan.org" --builder=Module::Build --license=perl --verbose
$ perl Build.PL
$ ./Build test
$ ./Build dist
Module Install Instructions
To install lib::remote, copy and paste the appropriate command in to your terminal.
cpanm lib::remote
perl -MCPAN -e shell install lib::remote
For more information on module installation, please visit the detailed CPAN module installation guide.