我有一些Rails ActiveRecord代码,如下所示:
new_account_number = Model.maximum(:account_number)
# Some processing that usually involves incrementing
# the new account number by one.
Model.create(foo: 12, bar: 34, account_number: new_account_number)
Run Code Online (Sandbox Code Playgroud)
这段代码本身很好用,但我有一些由DelayedJob工作人员处理的后台作业.有两个工作者,如果他们都开始处理一批处理此代码的作业,他们最终会创建Model具有相同account_number的新记录,因为找到最大值和创建具有更高帐户的新记录之间的延迟数.
现在,我已经通过在数据库级别向模型表添加唯一性约束来解决它,然后通过在该约束触发异常的情况下重新选择最大值来重试.
然而,感觉就像一个黑客.
在数据库级别向account_number列添加自动递增不是一种选择,因为account_number分配不仅仅需要递增.
理想情况下,我想锁定有问题的表进行读取,因此在完成之前,没有其他人可以对表执行最大选择查询.但是,我不知道该怎么做.我正在使用Postgresql.
我正在尝试使用Composer并来自RubyGems/Bundler背景,它确实展示了一些有趣的行为.
我尝试创建一个新的Laravel项目,令我惊讶的是,我发现我最终得到了一个超过70兆字节的供应商文件夹.
虽然Laravel确实提供了很多功能,但我发现它的大小很奇怪,所以我检查了vendor文件夹的内容,发现它不仅包含代码,还包含单元测试,文档和整个git历史记录.对于Swiftmailer,我甚至为各种电子邮件标准找到了lenghty RFC.
虽然访问依赖项的规范和存储库历史记录很方便,但它确实创建了一个相当耗时的部署过程,并且使用不相关的数据来填充生产服务器.
我确实理解我可能会编写一个工匠命令来"构建"应用程序并通过查看所有git历史来消除依赖关系,但它似乎是一个可能已经解决的问题的肮脏解决方案.
所以问题是:是否有一种安装作曲家依赖关系的方法,所以只下载运行(Laravel)应用程序实际需要的代码?
--prefer-dist我发现您可以--prefer-dist在创建新项目时传递该选项,.eg
composer create-project laravel/laravel my-new-project --prefer-dist
Run Code Online (Sandbox Code Playgroud)
这使得Composer更喜欢压缩分发而不是直接从VCS获取源代码(例如GitHub)
这使您无法获取git历史记录并将供应商文件夹减少到17兆字节.但是,仍然包括规格,文档等.如果有办法将其降低到几兆字节,那就太好了.
我想写一个请求规范,验证在给定页面上加载和执行javascript没有任何错误.
我知道我可以在我的JavaScript文件的末尾添加一些东西并断言这些内容的存在,但这感觉就像一个黑客,并迫使我污染我的代码以进行测试.我更愿意做一些事情.
visit some_path
page.should succesfully_run_javascript
Run Code Online (Sandbox Code Playgroud) 考虑以下功能
function current_dir {
set -e
git foobar
echo "I will not print this, because git foobar returned a non-zero exit code"
}
Run Code Online (Sandbox Code Playgroud)
现在,当我获取函数并尝试在我的shell中调用它时,它不仅退出函数,还退出shell本身.
如何避免这种情况?
我正在尝试根据在postgresRaspbian和Mac OS X/Debian 上运行的官方图像制作自定义图像.
当我做的时候
from postgres:10.4 并且构建了Dockerfile,似乎docker隐式选择了postgres的x64版本,然后只根据该架构构建了一个新的图像.
因此,当我将图像推送到我的GitLab注册表并再次下载时,它不起作用.它抛出一个standard_init_linux.go:190: exec user process caused "exec format error",我认为这是另一种说错建筑的方式.
我可以通过https://blog.docker.com/2017/09/docker-official-images-now-multi-platform/收集,在一个图像中支持多个架构,使其成为"多拱".然而,尽管资源很多,但对于我如何构建自己的多拱形图像以及需求是什么并不明显.
理想情况下,我希望能够无缝地构建和推送armv7和x64版本 - 来自Raspberry Pi/Raspbian主机和Mac/Debian主机.
我发现了这个问题:交叉编译多拱容器
其中一个答案表明了一个过程.但是,该进程不支持使用该RUN命令的dockerfiles ,这是我的项目的要求.
我试图在docker容器中运行一个小的Rails应用程序.我越来越近,但我正在努力使用我的Dockerfile.
我已将以下命令添加到我的Dockerfile中,以递归方式添加项目文件夹中的所有文件.
ADD .
Run Code Online (Sandbox Code Playgroud)
在此之后,我跑了
RUN bundle install --deployment
Run Code Online (Sandbox Code Playgroud)
但是,因为我的ADD命令还添加了Dockerfile,这意味着每次编辑Dockerfile时我的图像缓存都会中断,迫使我重新绑定.
根据https://docs.docker.com/reference/builder/#the-dockerignore-file,我可以使用一个.dockerignore文件来忽略Dockerfile,但这会导致docker build命令失败
2014/09/17 22:12:46 Dockerfile was excluded by .dockerignore pattern 'Dockerfile'
Run Code Online (Sandbox Code Playgroud)
如何轻松地将我的项目添加到我的图像,但排除Dockerfile,所以我不打破docker镜像缓存?
我经常发现自己编写Ruby代码,在那里我检查是否存在值,然后在存在的情况下使用该值执行某些操作.例如
if some_object.some_attribute.present?
call_something(some_object.some_attribute)
end
Run Code Online (Sandbox Code Playgroud)
如果它可以写成,我认为它会很酷
some_object.some_attribute.presence { |val| call_something(val) }
=> the return value of call_something
Run Code Online (Sandbox Code Playgroud)
任何人都知道Ruby中是否有这样的功能或者是否支持activesupport?
我打开了此功能的拉取请求.
考虑以下HTML:
.top {
min-height: 150px;
}
p {
margin: 50px;
}
div {
background-color: #eee;
}Run Code Online (Sandbox Code Playgroud)
<div class="top">
<p>Welcome</p>
</div>
<div class="content">Main content</div>Run Code Online (Sandbox Code Playgroud)
您可以在此处查看它的运行情况:
在Chrome(适用于Ubuntu)中,p标签上定义的边距似乎导致顶部div及其周围元素之间的间距,而不是扩展顶部div并产生相当于在顶部div上添加50像素填充的效果。
这是正确的行为吗?如果是这样,我如何确保top div中的子元素不能在top div和内容div之间创建不希望的空间。
如果我使用固定高度而不是最小高度,则顶部和内容div之间的间距消失,但是顶部仍在其上方产生50像素的空白。
假设我有人物对象的以下JSON.
[
{
"name": "Alice",
"age": 28,
},
{
"name": "Bob",
"age": 33
}
]
Run Code Online (Sandbox Code Playgroud)
如果我解析这个,我将得到一个包含两个JavaScript对象的数组.让我们说,我想用这个名为introduction的方法来装备这两个对象,它就是这样做的
function introduce() {
return "My name is " + this.name + " and I am " + this.age + " years old.";
}
Run Code Online (Sandbox Code Playgroud)
现在,我可以迭代我的两个人并打电话
person.constructor.prototype.introduce = introduce
Run Code Online (Sandbox Code Playgroud)
但是,这将在所有JavaScript对象中公开介绍函数,而不仅仅是上面的两个.
我也可以手动将函数附加到每个对象,但如果我想用其他函数扩展我的人员,我将不得不再次迭代所有人.
理想情况下,我想要一个原型,我可以使用该introduce方法,然后将这个原型附加到我的所有人,所以如果我以后扩展原型,我的人也将获得额外的功能.
问题是:如何?
我正在试验 ActiveStorage,因为我想创建一个 Rails 应用程序,用户可以在其中直接上传到 DigitalOcean 空间。
但是,我已经遇到了 CSRF 问题。
我在我的 storage.yml 中声明了数字海洋:
do:
service: S3
access_key_id: this_is_a_secret
secret_access_key: this_is_also_a_secret
region: ams3
bucket: this_is_also_a_secret
endpoint: 'https://this_is_also_a_secret.ams3.digitaloceanspaces.com'
Run Code Online (Sandbox Code Playgroud)
我选择了我的存储服务 development.rb
config.active_storage.service = :do
Run Code Online (Sandbox Code Playgroud)
我已经将 aws gem 添加到 Gemfile
gem "aws-sdk-s3", require: false
Run Code Online (Sandbox Code Playgroud)
我activestorage在我的 javascript 包中需要。
我已将以下内容添加到我的视图中以进行测试:
= form_for(VideoUpload.first, url: "/") do |form|
div = form.file_field :file, direct_upload: true
div = form.submit("Send that file")
Run Code Online (Sandbox Code Playgroud)
当我提交表单时,activestorage.js 库会启动。它调用它又http://127.0.0.1:3000/rails/active_storage/direct_uploads由于缺少 CSRF 令牌而抛出 422。我已经检查了请求,控制器没有错。HTTP 标头中没有设置 CSRF 令牌,X-CSRF-Token奇怪地设置为undefined.
请求正文包含:{"blob":{"filename":"9T6qqsA-png-wallpapers.jpg","content_type":"image/jpeg","byte_size":122990,"checksum":"gqU9VBgS9mmH7s45qHIbug=="}},所以这里也没有 CSRF …
docker ×2
activerecord ×1
bash ×1
capybara ×1
composer-php ×1
css ×1
javascript ×1
json ×1
laravel-4 ×1
locking ×1
macos ×1
php ×1
postgresql ×1
prototype ×1
raspbian ×1
ruby ×1
shell ×1
sql ×1