我对django的内置注释模型进行了简单的查询,并使用heroku的postgreSQL数据库获取下面的错误:
DatabaseError: operator does not exist: integer = text LINE 1:
... INNER JOIN "django_comments" ON ("pi ns_pin"."id" = "django_...
^
HINT: No operator matches the given name and argument type(s).
You might need to add explicit type casts.
Run Code Online (Sandbox Code Playgroud)
在谷歌搜索之后似乎这个错误在django之前已经被解决了很多次,但我仍然得到它(所有相关问题都在3 - 5年前关闭).我正在使用django 1.4版和最新版本的tastypie.
查询是在orm过滤器下进行的,并且与我的开发数据库(sqlite3)完美配合:
class MyResource(ModelResource):
comments = fields.ToManyField('my.api.api.CmntResource', 'comments', full=True, null=True)
def build_filters(self, filters=None):
if filters is None:
filters = {}
orm_filters = super(MyResource, self).build_filters(filters)
if 'cmnts' in filters:
orm_filters['comments__user__id__exact'] = filters['cmnts']
class CmntResource(ModelResource):
user = fields.ToOneField('my.api.api.UserResource', 'user', full=True) …Run Code Online (Sandbox Code Playgroud) 我在heroku上使用django-compressor和amazon s3提供静态文件,并且我一直遇到以下错误,压缩器生成了静态文件的链接.我对压缩机和s3完全不熟悉:
https://xxx.s3.amazonaws.com/static/CACHE/css/989a3bfc8147.css?Signature=tBJBLUAWoA2xjGlFOIu8r3SPI5k%3D&Expires=1365267213&AWSAccessKeyId=AKIAJCWU6JPFNTTJ77IQ
<Error>
<Code>AccessDenied</Code>
<Message>Request has expired</Message>
<RequestId>FE4625EF498A9588</RequestId>
<Expires>2013-04-06T16:53:33Z</Expires>
<HostId>Fbjlk4eigroefpAsW0a533NOHgfQBG+WFRTJ392v2k2/zuG8RraifYIppLyTueFu</HostId>
<ServerTime>2013-04-06T17:04:41Z</ServerTime>
</Error>
Run Code Online (Sandbox Code Playgroud)
我配置了两个heroku服务器,一个用于暂存,一个用于生产.他们每个人都有自己的数据库和s3桶.它们还共享相同的设置文件,所有唯一设置都配置为环境变量.我已经检查过静态文件实际上被推送到各自的存储桶.
压缩机和s3设置如下:
COMPRESS_ENABLED = True
COMPRESS_STORAGE = STATICFILES_STORAGE
COMPRESS_URL = STATIC_URL
COMPRESS_ROOT = STATIC_ROOT
COMPRESS_OFFLINE = False
AWS_ACCESS_KEY_ID = os.environ.get('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = os.environ.get('AWS_SECRET_ACCESS_KEY')
AWS_STORAGE_BUCKET_NAME = os.environ.get('AWS_STORAGE_BUCKET_NAME')
Run Code Online (Sandbox Code Playgroud)
每次我在升级或生产时将更新推送到heroku时,我最终遇到了上述问题.有时它发生在一小时后,有时一天,有时一周,有时一旦更新被推出.奇怪的是,如果我将相同的更新推送到两个环境,一个将工作,我将在另一个上得到错误,或者它们将首先工作,一个将在一小时后到期,另一个将在一周内到期.
如果有人能解释发生了什么,我真的很感激.显然,Expires参数会导致问题,但为什么持续时间会随着每次推送而变化,以及什么决定了时间量?你如何改变过期时间?如果您需要更多信息,请与我们联系.
更新:我通过设置AWS_QUERYSTRING_AUTH = False暂时解决了这个问题.似乎没有任何方法可以在查询字符串中设置EXPIRATION TIME,仅在请求标头中使用.
我使用django-compresor作为部署在heroku上的应用程序,亚马逊S3提供静态文件.一切都工作正常,除了我在背景图像中引用的css中的图像:url()没有使用正确的路径呈现.
我的静态文件按以下目录结构组织:
-static
-myapp
-js
-css
-img
-bootstrap
-js
-css
-img
-othervendor
-js
-css
-img
Run Code Online (Sandbox Code Playgroud)
因此,我在url()中使用的路径是相对于css文件的:
url("../img/icon.png")
Run Code Online (Sandbox Code Playgroud)
我的所有css文件都被压缩并移动到我的静态目录中的CACHE文件夹中,并且CACHE目录的url正确呈现为:
https://mybucket.s3.amazonaws.com/static/CACHE/css/somehash.css
Run Code Online (Sandbox Code Playgroud)
问题是css文件url()中的图像呈现为:
https://mybucket.s3.amazonaws.com/static/CACHE/img/imagefile.png
Run Code Online (Sandbox Code Playgroud)
它应该是:
https://mybucket.s3.amazonaws.com/static/myapp/img/imagefile.png
Run Code Online (Sandbox Code Playgroud)
或者如果图像被复制到CACHE目录,这将起作用:
https://mybucket.s3.amazonaws.com/static/CACHE/img/imagefile.png
Run Code Online (Sandbox Code Playgroud)
我的临时修复是将我的CSS中的图像路径更改为以下内容并且它有效:
url("/static/foldername/img/icon.png")
Run Code Online (Sandbox Code Playgroud)
我是django和压缩机的新手,所以我不确定应该是什么样的正确行为,但这似乎不正确.我看到它的方式,问题可以是固定的,如果我能得到的Django压缩机做两件事情:1)复制)在CSS的url(引用的所有图像到CASHE/IMG目录或2)使所代表的正确网址../这是我的设置:
我的模板中的css文件位于{%compress css%}块中.
s3utils.py(用于在我的存储桶中创建单独的媒体和静态目录)
from storages.backends.s3boto import S3BotoStorage
StaticS3BotoStorage = lambda: S3BotoStorage(location='static')
StaticRootS3BotoStorage = lambda: S3BotoStorage(location='static')
MediaS3BotoStorage = lambda: S3BotoStorage(location='media')
MediaRootS3BotoStorage = lambda: S3BotoStorage(location='media')
Run Code Online (Sandbox Code Playgroud)
settings.py
DEFAULT_FILE_STORAGE = 'myapp.settings.s3utils.MediaRootS3BotoStorage'
STATICFILES_STORAGE = 'myapp.settings.s3utils.StaticRootS3BotoStorage'
AWS_ACCESS_KEY_ID = os.environ.get('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = os.environ.get('AWS_SECRET_ACCESS_KEY')
AWS_STORAGE_BUCKET_NAME = os.environ.get('AWS_STORAGE_BUCKET_NAME')
S3_URL = 'http://%s.s3.amazonaws.com/' % AWS_STORAGE_BUCKET_NAME
MEDIA_URL = S3_URL+'media/'
MEDIA_ROOT = S3_URL+'media/'
STATIC_URL = …Run Code Online (Sandbox Code Playgroud) 我有一个非常大的类,它作为许多AdapterClasses的BaseClass.基类由可以分类如下的方法组成:
我认为分离如下将使开发变得更容易,并使公众api更清晰.在我接受这个重新考虑之前,我想要一些反馈.欢迎思考,评论,建议..
这是我正在做的非常简化的抽象,甚至不接近我的实际代码.我只是试图传达结构.
一个问题:请参阅有关to_adapter的类级别访问权限的注释.我想访问,DislexiaAadpter.tr.to_adapter()但因为它是一个类属性,Translator你不能同时使用多个适配器.当译者方法是BaseClass的一部分时,这不是问题.
class Translator(object):
ac = None
dictionaries = {'english_spanish':{'hello world':'hola mundo', "i'm just backwards":'Solo soy al reves'}}
def __init__(self, c):
self.ac = c
def to_adapter(self, phrase):
r = self.by_lang(phrase, self.ac.lang)
return r
@classmethod
def by_lang(cls, phrase, lang=None):
d = cls.get_dictionary(lang)
if isinstance(d, dict):
for k, v in d.items():
if phrase in k:
return v
return phrase
else:
return d
@classmethod
def get_dictionary(cls, lang='english'):
for k, …Run Code Online (Sandbox Code Playgroud) 我在Windows 8上使用pycharm 4.0.4,我的项目结构如下:
my_django_project (pycharm content root)
-lib
-docs
-scripts (virtualenv)
-my_project (pycharm source root)
-tempaltes
-management
-models.py
-views.py
etc....
Run Code Online (Sandbox Code Playgroud)
pycharm项目解释器:
2.7.2 virualenv at c:\path\to\my_django_project
Run Code Online (Sandbox Code Playgroud)
我正在尝试在 models.py 文件中的类中执行更改签名重构和方法。
使用上述设置的项目解释器,重命名重构可以完美工作,但是更改签名会导致Cannot perform Refactoring. Function is not under the source root"
如果我将 pycharm 项目解释器更改为:
2.7.2 virualenv at c:\Python27\python.exe
Run Code Online (Sandbox Code Playgroud)
所有重构都有效,但是,这不是我的 virtualenv。我究竟做错了什么?为了重构而必须切换出 virtualenv 似乎是错误的。
欢迎任何想法,谢谢!
我有一个函数,旨在捕获命令的输出并缩进每一行:
indent_lines () {
local line
local indent=" "
while IFS= read -r line || [[ -n "$line" ]]; do
# remove \r and replace with \r$indent
echo "$indent $(echo "$line" | sed "s/$(printf '\r')/$(printf '\r')$indent /g")"
done
}
Run Code Online (Sandbox Code Playgroud)
这是这样使用的:
some command 2>&1 | indent_lines
Run Code Online (Sandbox Code Playgroud)
来自的整个输出通过some command 2>&1管道传输到 indent_lines 函数中,并且每一行输出都将缩进。这适用于read -pin 从 inside 调用的情况some command,例如:
get_name () {
echo "this is a line of output 1"
echo "this is a line of output 2" …Run Code Online (Sandbox Code Playgroud)