我在Ubuntu 14.04盒子上运行openvpn.设置很好,直到OpenSSL升级,然后当我尝试使用easy-rsa创建新的客户端证书时,我得到了以下消息:
root@:easy-rsa# ./pkitool onokun
Using Common Name: onokun
Generating a 2048 bit RSA private key
.+++
........+++
writing new private key to 'onokun.key'
-----
Using configuration from /etc/openvpn/easy-rsa/openssl-1.0.0.cnf
Error Loading extension section usr_cert
3074119356:error:0E06D06C:configuration file routines:NCONF_get_string:no value:conf_lib.c:335:group=CA_default name=email_in_dn
3074119356:error:2207507C:X509 V3 routines:v2i_GENERAL_NAME_ex:missing value:v3_alt.c:537:
3074119356:error:22098080:X509 V3 routines:X509V3_EXT_nconf:error in extension:v3_conf.c:93:name=subjectAltName, value=onokun
Run Code Online (Sandbox Code Playgroud)
此问题与报告的错误不同,即which opensslcnf脚本无法找到openssl.cnf要使用的匹配版本(上面的消息显示openssl-1.0.0.cnf).我进行了谷歌搜索,但没有找到答案.
以下是一些环境信息:
## openvpn
OpenVPN 2.3.2 i686-pc-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL] [PKCS11] [eurephia] [MH] [IPv6] built on Feb 4 2014
Originally developed by James …Run Code Online (Sandbox Code Playgroud) 我有以下代码部分工作,
class ThreadSpider(CrawlSpider):
name = 'thread'
allowed_domains = ['bbs.example.com']
start_urls = ['http://bbs.example.com/diy']
rules = (
Rule(LinkExtractor(
allow=(),
restrict_xpaths=("//a[contains(text(), 'Next Page')]")
),
callback='parse_item',
process_request='start_requests',
follow=True),
)
def start_requests(self):
for url in self.start_urls:
yield SplashRequest(url, self.parse_item, args={'wait': 0.5})
def parse_item(self, response):
# item parser
Run Code Online (Sandbox Code Playgroud)
代码只会运行start_urls但不会遵循指定的链接restricted_xpaths,如果我注释掉start_requests()方法和process_request='start_requests',规则中的行,它将运行并跟踪预期的链接,当然没有js渲染.
我已阅读了两个相关问题,CrawlSpider与飞溅卡住第一URL后和CrawlSpider飞溅和专变scrapy.Request()向SplashRequest()的start_requests()方法,但似乎并没有工作.我的代码出了什么问题?谢谢,
在没有接受答案的情况下,这里的问题被问到了Scipes上的外键,所以我在这里用更明确的最小设置来重新提出问题:
django模型:
class Article(models.Model):
title = models.CharField(max_length=255)
content = models.TextField()
category = models.ForeignKey('categories.Category', null=True, blank=True)
Run Code Online (Sandbox Code Playgroud)
注意category这里的定义是如何无关紧要的,但确实如此ForeignKey.所以,在django shell中,这可以工作:
c = Article(title="foo", content="bar", category_id=2)
c.save()
Run Code Online (Sandbox Code Playgroud)
scrapy项目:
class BotsItem(DjangoItem):
django_model = Article
Run Code Online (Sandbox Code Playgroud)
scrapy管道:
class BotsPipeline(object):
def process_item(self, item, spider):
item['category_id'] = 2
item.save()
return item
Run Code Online (Sandbox Code Playgroud)
使用上面的代码,scrapy抱怨:
exceptions.KeyError: 'BotsItem does not support field: category_id'
Run Code Online (Sandbox Code Playgroud)
公平,因为category_id没有出现在django模型中,我们从中得到了scrapy项目.为了记录,如果我们有管道(假设我们有一个类别foo):
class BotsPipeline(object):
def process_item(self, item, spider):
item['category'] = 'foo'
item.save()
return item
Run Code Online (Sandbox Code Playgroud)
现在scrapy抱怨:
exceptions.TypeError: isinstance() arg 2 must …Run Code Online (Sandbox Code Playgroud) 我创建了一个这样的请求对象:
obj.mp3 = requests.get('http://foo.com/bar.mp3', stream=True)
Run Code Online (Sandbox Code Playgroud)
我认为我可以将这个obj.mp3对象提供给任何需要文件或URI的音频播放器,显然这个想法是错误的:没有播放.以下是完整代码:
#views.py
class ArticleDetailView(DetailView):
model = Article
template_name = 'song.html'
def get_object(self):
obj = super(ArticleDetailView, self).get_object()
#code to store mp3 url in obj.mp3 and other stuff
if obj.mp3:
obj.mp3 = requests.get(obj.mp3, stream=True).content
return obj
#song.html
<div class="audio">
<audio src={{ article.mp3 }} type="audio/mpeg">
</div>
Run Code Online (Sandbox Code Playgroud)
将回报requests视为可以与玩家一起传播的东西的正确方法是什么?我知道至少我可以写obj.mp3一个文件,然后只是将播放器指向文件位置,但我试图避免将文件写入磁盘.
谢谢,