cfg相关知识
-
PhpMyAdmin 配置文件现在需要一个短语密码的解决方法新版本的PhpMyAdmin 增强了安全性,需要在配置文件设置一个短语密码。否则进入之后会有“配置文件现在需要一个短语密码。”的红色警叹提示。解决方法:1、将 phpMyAdmin/libraries/config.default.php中的$cfg['blowfish_secret'] = ''; 改成 $cfg['blowfish_secret'] = '123456'; (注:其中的'123456′为随意的字符)2、在phpMyAdmin目录中,打开config.sample.inc.php,18行$cfg['blowfish_secret'] = ''; 改成 $cfg['blowfish_secret'] = '123456'; (注:其中的'123456′为随意的字符)这个密码用于Cookies的加密,以免多个PhpMyAdmin或者和其他程序共用Coo
-
虚拟主机中phpMyAdmin的安装配置方法 首先下载可以从它的官方站点 http://www.phpmyadmin.net/ 下载。站点上提供了不同的程序压缩方式供我们下载,这里我选择 bzip2 方式的来下载(因为这种文件体积小些,下其它格式的也可以)。 下面我们开始对phpmyadmin进行设置。 解压后得到一个目录,进入相关目录,打开 config.inc.php 文件, 找到 $cfg['PmaAbsoluteUri'] 修改你将上传到空间的phpMyAdmin的网址 如:$cfg['PmaAbsoluteUri'] = 'http://你的站点/phpmyadmin/'; 还有下面的 $cfg['Servers'][$i]['host'] = 'localhost';(通常用默认,也有例外) $cfg['Servers'][$i]['auth
-
17.AutoMapper 之配置(Configuration)配置(Configuration)通过构造函数创建并初始化MapperConfiguration实例:config = new MapperConfiguration(cfg => { cfg.CreateMap<Foo, Bar>(); cfg.AddProfile<FooProfile>(); });MapperConfiguration可以静态存储在静态字段或者依赖注入容器中。一经创建就无法更改/修改。或者,您可以使用静态Mapper实例初始化AutoMapper:Mapper.Initialize(cfg => { cfg.CreateMap<Foo, Bar>(); cfg
-
解决 phpmyadmin #2002 无法登录 MySQL 服务器 解决 .#2002 无法登录 MySQL 服务器 将config.sample.inc.php复制成config.inc.php 出现这个错误,表示没有连接到数据库。修改config.inc.php文件, 复制代码 代码如下: 将$cfg['Servers'][$i]['host'] = 'localhost'; 改为$cfg['Servers'][$i]['host'] = '127.0.0.1'; 或者 修改 php.ini : mysql.default_socket = /tmp/mysql.sock 搞定
cfg相关课程
cfg相关教程
- 3.2 编程配置 所谓编程配置,指通过代码的方式添加配置内容,如下代码用编码方式指定映射文件位置:Configuration cfg = new Configuration().addResource("Student.hbm.xml").addResource("Teacher.hbm.xml");如下代码中指定的 PO 映射是通过注解方式实现的:Configuration cfg = new Configuration().addClass(org.mk.po.Studentclass).addClass(org.mk.po.Teacher.class);当然,除此之外,其它的信息都可以通过编程实现:Configuration cfg = new Configuration().addClass(org.mk.po.Studentclass).addClass(org.mk.po.Teacher.class).setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLDialect").setProperty("hibernate.connection.datasource", "java:comp/env/jdbc/test").setProperty("hibernate.order_updates", "true");至于是否选择编程方式向 Hibernate 进行信息注入,由开发者自行决定。
- 2.3 集群的 cfg 配置 我们进入 Zookeeper 根目录中的 conf 文件夹,编辑 zoo.cfg 文件:cd /usr/local/zookeeper/apache-zookeeper-3.6.1-bin/conf/vi zoo.cfg在 zoo.cfg 配置文件的末尾添加以下配置,这里每台机器都是同样的配置。server.1=192.168.0.77:2888:3888server.2=192.168.0.88:2888:3888server.3=192.168.0.99:2888:3888我们来介绍一下这一段配置的含义,以 server.1=192.168.0.77:2888:3888 为例:server.1: 表示编号为 1 的服务器,这里的 1 要与该服务器的 myid 文件的内容相同;192.168.0.77: 该服务器的地址;2888: 服务之间通信的端口,默认值 2888;3888: 服务之间选举的端口,默认值 3888。到这里我们的配置部分就完成了,接下来我们依次启动 3 台机器的 Zookeeper 服务。
- 3.1 可配置内容 最小需求配置信息:Hibernate 运行的底层信息:数据库的 URL、用户名、密码、JDBC 驱动类,数据库 Dialect, 数据库连接池等;Hibernate 映射文件(*.hbm.xml)或注解类位置。配置信息远不止上面这些,如缓存信息、事务信息……主配置文件是开发者和 Hibernate 心灵相连的接口,要让程序在生产环境中工作,需要交流的地方多了。前面在主配置文件中出现的信息就不再啰嗦!下面罗列部分配置信息内容!不要指望全部记住!!!!属性名用途 Hibernate.dialect 针对特定的关系数据库生成优化的 SQLHibernate.format_sql 格式化输出 SQL 语句(true,false)Hibernate.default_schema 将给定的 schema/tablespace 附加到表名上(schema name)Hibernate.hbm2ddl.auto 自动构建数据库结构,通过映射生成 DDL 语句。create-drop: 运行时,先创建,运行完,再删除create: 每次运行前都会删除已存在的再创建。 测试时,可以使用 createHibernate.cache.use_query_cache 允许查询缓存,个别查询仍然需要被设置为可缓存的 Hibernate.cache_user_second_level_cache 禁止使用二级缓存,对于在映射中定义中指定的类,会默认开启二级缓存 Hibernate.cahce_query_cache_factory 自定义实现 querycache 接口的类名,默认为内建的 standardQueryCacheHibernate 主配置文件的格式Hibernate 提供了一个与配置文件有关的 Configuration 组件,它的功能是:找到配置文件,读取配置文件内容;告诉 Hibernate 应该如何响应开发者的请求。Hibernate 提供有 2 种配置文件格式,格式不同 Configuration 读取时也稍有差异性。属性文件(hibernate.properties)格式:在实例化 Configuration 组件时,Hiberntae 指定的默认配置文件; Configuration cfg = new Configuration();XML 文件(hibernate.cfg.xml)格式:需要显示调用 Configuration 组件的 configure()方法,此方法不带参数时,默认会从 classpath 下寻找是否存在 hibernate.cfg.xml 文件。 Configuration cfg = new Configuration().configure();hibernate 官方建议使用 Hibernate.cfg.xml 作为主配置文件名,当然完全可以修改成自己喜欢的名字,修改后读取时则需要使用 Configuration 组件中提供的带参数的 configure()方法。public Configuration configure(String resource) throws HibernateException ;建议初学者不要轻易改动。
- 2.3 shell 命令的执行过程 我们在上一节中介绍了 scrapy shell [url] 这样的指令,它帮助我们进入交互模式去执行调试获取网页的 xpath 表达式。我们有没有想过这个命令背后的原理?今天我们专门学习了 Scrapy Command,那么就正好借此机会看看 scrapy shell [url] 这条命令背后的原理是什么。根据前面跟踪代码的经验,我们可以直接定位到 scrapy/commands/shell.py 下 Command 类中的 run() 方法即可:# 源码位置: scrapy/commands/shell.py# ...class Command(ScrapyCommand): # ... def run(self, args, opts): url = args[0] if args else None if url: # first argument may be a local file url = guess_scheme(url) spider_loader = self.crawler_process.spider_loader spidercls = DefaultSpider if opts.spider: spidercls = spider_loader.load(opts.spider) elif url: # 如果传入了url参数,后面需要做请求 spidercls = spidercls_for_request(spider_loader, Request(url), spidercls, log_multiple=True) crawler = self.crawler_process._create_crawler(spidercls) crawler.engine = crawler._create_engine() crawler.engine.start() # 启动爬虫线程爬取url self._start_crawler_thread() shell = Shell(crawler, update_vars=self.update_vars, code=opts.code) shell.start(url=url, redirect=not opts.no_redirect) def _start_crawler_thread(self): t = Thread(target=self.crawler_process.start, kwargs={'stop_after_crawl': False}) t.daemon = True t.start()其实上面代码的执行逻辑是比较简单的,总的来说就做了2件事情:创建 scrapy 引擎并单独启动一个线程,后台运行;启动 shell 线程;我们来关注下 Shell 这个类:# 源码位置:scrapy/shell.py# ...class Shell: # ... def start(self, url=None, request=None, response=None, spider=None, redirect=True): # disable accidental Ctrl-C key press from shutting down the engine signal.signal(signal.SIGINT, signal.SIG_IGN) if url: self.fetch(url, spider, redirect=redirect) elif request: self.fetch(request, spider) elif response: request = response.request self.populate_vars(response, request, spider) else: self.populate_vars() if self.code: print(eval(self.code, globals(), self.vars)) else: """ Detect interactive shell setting in scrapy.cfg e.g.: ~/.config/scrapy.cfg or ~/.scrapy.cfg [settings] # shell can be one of ipython, bpython or python; # to be used as the interactive python console, if available. # (default is ipython, fallbacks in the order listed above) shell = python """ cfg = get_config() section, option = 'settings', 'shell' env = os.environ.get('SCRAPY_PYTHON_SHELL') shells = [] if env: shells += env.strip().lower().split(',') elif cfg.has_option(section, option): shells += [cfg.get(section, option).strip().lower()] else: # try all by default shells += DEFAULT_PYTHON_SHELLS.keys() # always add standard shell as fallback shells += ['python'] start_python_console(self.vars, shells=shells, banner=self.vars.pop('banner', ''))从上面的代码我们可以看到一点,当传入的参数有 url 或者 request 时,会调用 fetch() 方法去下载网页数据,它会调用 twisted 框架中的 threads 来执行网页的下载动作,并设置变量 response 。这就是为什么我们能在 scrapy shell 中直接使用 response 获取下载网页内容的原因。# 源码位置:scrapy/shell.py# ...class Shell: # ... def fetch(self, request_or_url, spider=None, redirect=True, **kwargs): from twisted.internet import reactor if isinstance(request_or_url, Request): request = request_or_url else: url = any_to_uri(request_or_url) request = Request(url, dont_filter=True, **kwargs) if redirect: request.meta['handle_httpstatus_list'] = SequenceExclude(range(300, 400)) else: request.meta['handle_httpstatus_all'] = True response = None try: response, spider = threads.blockingCallFromThread( reactor, self._schedule, request, spider) except IgnoreRequest: pass # 设置response结果 self.populate_vars(response, request, spider) def populate_vars(self, response=None, request=None, spider=None): import scrapy self.vars['scrapy'] = scrapy self.vars['crawler'] = self.crawler self.vars['item'] = self.item_class() self.vars['settings'] = self.crawler.settings self.vars['spider'] = spider self.vars['request'] = request self.vars['response'] = response if self.inthread: self.vars['fetch'] = self.fetch self.vars['view'] = open_in_browser self.vars['shelp'] = self.print_help self.update_vars(self.vars) if not self.code: self.vars['banner'] = self.get_help() # ...继续跟踪前面的 start() 方法,很明显我们的核心函数就是一句:start_python_console(self.vars, shells=shells, banner=self.vars.pop('banner', ''))self.vars 就是需要带到 shell 环境中的变量,shells 是我们选择交互的环境,后面可以看到总共支持4种交互环境,分别是 ptpython、ipython、ipython、和 python。banner 参数则表示进入交互模式是给出的提示语句。我们来看 start_python_console() 方法的源码:# 源码位置:scrapy/utils/console.py# ...DEFAULT_PYTHON_SHELLS = OrderedDict([ ('ptpython', _embed_ptpython_shell), ('ipython', _embed_ipython_shell), ('bpython', _embed_bpython_shell), ('python', _embed_standard_shell),])def get_shell_embed_func(shells=None, known_shells=None): """Return the first acceptable shell-embed function from a given list of shell names. """ if shells is None: # list, preference order of shells shells = DEFAULT_PYTHON_SHELLS.keys() if known_shells is None: # available embeddable shells known_shells = DEFAULT_PYTHON_SHELLS.copy() for shell in shells: if shell in known_shells: try: # function test: run all setup code (imports), # but dont fall into the shell return known_shells[shell]() except ImportError: continuedef start_python_console(namespace=None, banner='', shells=None): """Start Python console bound to the given namespace. Readline support and tab completion will be used on Unix, if available. """ if namespace is None: namespace = {} try: shell = get_shell_embed_func(shells) if shell is not None: shell(namespace=namespace, banner=banner) except SystemExit: # raised when using exit() in python code.interact pass通过分析代码可知:get_shell_embed_func() 方法最终会返回 DEFAULT_PYTHON_SHELLS 中对应值得那个,比如我们传入的 shells 值为 ['python'],则最后返回 _embed_standard_shell() 这个函数。最后就是调用这个函数,即可得到 scrapy shell 的交互模式。来最后看一看 _embed_standard_shell() 这个神奇的方法:# 源码位置:scrapy/utils/console.py# ...def _embed_standard_shell(namespace={}, banner=''): """Start a standard python shell""" import code try: # readline module is only available on unix systems import readline except ImportError: pass else: import rlcompleter # noqa: F401 readline.parse_and_bind("tab:complete") @wraps(_embed_standard_shell) def wrapper(namespace=namespace, banner=''): code.interact(banner=banner, local=namespace) return wrapper这段代码虽然简短,但它却是实现 scrapy shell 交互模式的核心方法。接下来,我们将基于上面这些方法来模拟构造一个简化的交互式模式来帮助我们更好的理解这些方法的作用。来看我抽取这些方法,简单编写的一个 test.py 脚本:[root@server2 shen]# cat test.py from functools import wrapsdef _embed_standard_shell(namespace={}, banner=''): """Start a standard python shell""" import code try: # readline module is only available on unix systems import readline except ImportError: pass else: import rlcompleter # noqa: F401 readline.parse_and_bind("tab:complete") @wraps(_embed_standard_shell) def wrapper(namespace=namespace, banner=''): code.interact(banner=banner, local=namespace) return wrapperdef start_python_console(namespace=None, banner='', shells=None): """Start Python console bound to the given namespace. Readline support and tab completion will be used on Unix, if available. """ if namespace is None: namespace = {} try: shell = _embed_standard_shell() shell(namespace=namespace, banner=banner) except SystemExit: # raised when using exit() in python code.interact passstart_python_console({'hello': 'world'}, banner='nothing to say')我们来运行下这个测试脚本看看效果:[root@server2 shen]# python3 test.py nothing to say>>> hello'world'>>> xxxTraceback (most recent call last): File "<console>", line 1, in <module>NameError: name 'xxx' is not defined>>> exit()是不是和 scrapy shell 交互式一模一样?到此为止,我们对 scrapy shell 这个命令已经分析的非常清楚了,大家是不是已经都理解了呢?
- 14. gin集成nacos 分布式电商系统
- Java 集成开发环境 - IDEA 面向就业的最佳首选语言
cfg相关搜索
-
c 正则表达式
c string
c 编程
c 程序设计
c 程序设计教程
c 多线程编程
c 教程
c 数组
c 委托
c 下载
c 线程
c 语言
caidan
cakephp
call
calloc
calu
camera
caption
case语句