小编arc*_*lix的帖子

heroku,postgreSQL,django,comments,tastypie:没有运算符匹配给定的名称和参数类型.您可能需要添加显式类型转换

我对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)

django postgresql heroku django-comments tastypie

20
推荐指数
2
解决办法
3万
查看次数

django-compressor,heroku,s3:请求已过期

我在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 heroku amazon-s3 django-compressor

9
推荐指数
1
解决办法
1918
查看次数

django-compressor:具有相对于文件夹的路径的CSS图像

我使用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)

django-compressor

8
推荐指数
1
解决办法
2462
查看次数

Python:打破大班级的最佳方式

我有一个非常大的类,它作为许多AdapterClasses的BaseClass.基类由可以分类如下的方法组成:

  • 翻译:所有AdapterClasses使用的基本翻译类方法.需要来自AdapterClasses的类属性(使用内部/外部)这个的棘手部分是我想从AdapterClasses维护类级别访问,但是我没理由.现在我从AdapterClasses进行实例级访问,直接从Translator获得类级访问.
  • 操作:所有AdapterClasses使用的基本方法(内部)
  • adapter方法:AdapterClasses可以覆盖的方法,以满足特殊需求.(内部)
  • api方法:仅用于外部,但需要访问所有内部方法(外部)

我认为分离如下将使开发变得更容易,并使公众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)

python

7
推荐指数
0
解决办法
315
查看次数

Pycharm:错误“无法执行重构。函数不在源根目录下”

我在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 似乎是错误的。

欢迎任何想法,谢谢!

pycharm

5
推荐指数
2
解决办法
8992
查看次数

从脚本管道 stdout/stderr 时不显示 read -p 提示

我有一个函数,旨在捕获命令的输出并缩进每一行:

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)

bash shell

3
推荐指数
1
解决办法
1175
查看次数