我想知道如何在 Dockerfile 中实现以下内容(不使用 .dockerignore):
COPY `git ls-tree -r HEAD --name-only` ./
Run Code Online (Sandbox Code Playgroud)
也就是说,仅复制在 Git 存储库中跟踪的文件。当然,上面的方法是行不通的,因为 Docker 不会以这种方式执行 shell 命令,但也许类似的事情是可能的?
这是一个相当普遍的问题。例如,在 AWS Elastic Beanstalk 平台中,它使用git archive -v -o myapp.zip --format=zip HEAD
( https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/applications-sourcebundle.html )解决。类似地,Heroku 基于 Git 推送构建它的“slugs”(同样,仅在 Git 文件中跟踪)。
总结一下,我想将应用程序打包为 Docker 映像,我不想包含所有未跟踪和 Git 忽略的文件。我想避免将.gitignore
文件复制到.dockerignore
文件中。
我想知道是否有一种简单的方法可以将一个表的内容转储或加载到heroku共享数据库(postgres).heroku推荐了pgbackups插件,但根据文档,它支持转储和加载整个数据库.
我需要的是只转储/加载单个表.
我刚刚将一个旧应用程序从 Rails 3.0 升级到 4.2,现在无法在数据库中查询很长的 ID。
Product.where(associated_id: 1311344470881970878875083923).first
=> nil
Run Code Online (Sandbox Code Playgroud)
Product.where(associated_id: 1311344470881970878875083923).first
RangeError: 1311344470881970878875083923 is out of range for ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Integer with limit 8
from ~/.rvm/gems/ruby-2.2.1@gemset/gems/activerecord-4.2.3/lib/active_record/type/integer.rb:45:in `ensure_in_range'
Run Code Online (Sandbox Code Playgroud)
我希望在这种情况下,Rails 4.2.3 中的查找器也不会返回任何内容。它只是搜索结果,我们不需要调用ensure_in_range
。
更新:但是,以下方法可以正常工作(它可以作为解决方法):
Product.find_by(associated_id: 1311344470881970878875083923)
Run Code Online (Sandbox Code Playgroud)
它之所以有效,find_by
是因为其实现如下:
def find_by(*args)
where(*args).take
rescue RangeError
nil
end
Run Code Online (Sandbox Code Playgroud)
http://api.rubyonrails.org/classes/ActiveRecord/FinderMethods.html#method-i-find_by
不幸的是,ActiveRecord 4.2.3 中缺少返回所有结果的类似方法
def find_all_by(*args)
where(*args).load
rescue RangeError
none
end
Run Code Online (Sandbox Code Playgroud) 我注意到几乎所有的人都使用Proc.new而不是lambda(我想是因为它关心/不关心arity),并且通常将当前实例作为参数传递。但是,我检查了一下,即使没有| instance |,它也可以正常工作 作为arg通过。参见下面的例子
class SomeModel < ActiveRecord::Base
has_many :associated_objects
before_save :do_something, if: -> { associated_objects.empty? }
end
Run Code Online (Sandbox Code Playgroud)
根据官方指南和互联网上的大多数帖子,看来我应该写
before_save :do_something, if: Proc.new { |instance| instance.associated_objects.empty? }
Run Code Online (Sandbox Code Playgroud)
我的使用->和无参数的示例有问题吗?这类似于跳过自身作为self.some_method
内部模型代码中的接收者并使用隐式接收者。