我正在尝试部署Rails 5.1应用程序.我已经多次部署应用程序没有问题,但现在,我突然从Capistrano收到此错误消息
00:13 deploy:cleanup
SSHKit::Command::Failed: rm exit status: 1
rm stdout: Nothing written
rm stderr: rm: cannot remove '/opt/www/absence-
registrator/releases/20171017091250/node_modules/jquery/dist/jquery.js':
Permission denied
Tasks: TOP => deploy:cleanup
(See full trace by running task with --trace)
The deploy has failed with an error: Exception while executing as
user@myapp.com: rm exit status: 1 ?
rm stdout: Nothing written
rm stderr: rm: cannot remove '/opt/www/absence-
registrator/releases/20171017091250/node_modules/jquery/dist/jquery.js':Permission denied
rm: cannot remove '/opt/www/absence-registrator/releases/20171017091250/node_modules/jquery/dist/jquery.slim.js': Permission denied rm: cannot remove '/opt/www/absence-registrator/releases/20171017091250/node_modules/jquery/dist/jquery.min.js': Permission denied rm: cannot remove '/opt/www/absence-registrator/releases/20171017091250/node_modules/jquery/dist/jquery.min.map': Permission …Run Code Online (Sandbox Code Playgroud) 首先,应用程序发送的所有其他邮件都可以正常工作.只有在调用Devise中的重置密码时才会这样.从堆栈跟踪以及WEBrick输出完成电子邮件的创建,然后以EOFError终止.
Application Stack:
C:/Ruby192/lib/ruby/1.9.1/net/protocol.rb:135:in `read_nonblock'
C:/Ruby192/lib/ruby/1.9.1/net/protocol.rb:135:in `rbuf_fill'
C:/Ruby192/lib/ruby/1.9.1/net/protocol.rb:116:in `readuntil'
C:/Ruby192/lib/ruby/1.9.1/net/protocol.rb:126:in `readline'
C:/Ruby192/lib/ruby/1.9.1/net/smtp.rb:935:in `recv_response'
C:/Ruby192/lib/ruby/1.9.1/net/smtp.rb:921:in `block in getok'
C:/Ruby192/lib/ruby/1.9.1/net/smtp.rb:945:in `critical'
C:/Ruby192/lib/ruby/1.9.1/net/smtp.rb:919:in `getok'
C:/Ruby192/lib/ruby/1.9.1/net/smtp.rb:913:in `quit'
C:/Ruby192/lib/ruby/1.9.1/net/smtp.rb:619:in `do_finish'
C:/Ruby192/lib/ruby/1.9.1/net/smtp.rb:528:in `start'
mail (2.2.14) lib/mail/network/delivery_methods/smtp.rb:127:in `deliver!'
mail (2.2.14) lib/mail/message.rb:1967:in `do_delivery'
mail (2.2.14) lib/mail/message.rb:228:in `block in deliver'
actionmailer (3.0.3) lib/action_mailer/base.rb:401:in `block in deliver_mail'
activesupport (3.0.3) lib/active_support/notifications.rb:52:in `block in instrument'
activesupport (3.0.3) lib/active_support/notifications/instrumenter.rb:21:in `instrument'
activesupport (3.0.3) lib/active_support/notifications.rb:52:in `instrument'
actionmailer (3.0.3) lib/action_mailer/base.rb:399:in `deliver_mail'
mail (2.2.14) lib/mail/message.rb:228:in `deliver'
devise (1.1.5) lib/devise/models/recoverable.rb:31:in `send_reset_password_instructions'
devise (1.1.5) lib/devise/models/recoverable.rb:59:in `send_reset_password_instructions'
devise (1.1.5) app/controllers/devise/passwords_controller.rb:13:in …Run Code Online (Sandbox Code Playgroud) 我和sidekiq有问题.基本上我们NameError: uninitialized constant正在进行我们的sidekiq设置,导致大量作业失败.
错误日志说:
NameError: uninitialized constant GameUser::Lock
/data/@myapp/releases/20130321230952/app/models/game_user.rb:71:in `node_calls_base_get_user'
/data/@myapp/shared/bundled_gems/ruby/1.9.1/gems/sidekiq-2.8.0/lib/sidekiq/processor.rb:45:in `block (3 levels) in process'
/data/@myapp/shared/bundled_gems/ruby/1.9.1/gems/sidekiq-2.8.0/lib/sidekiq/middleware/chain.rb:109:in `call'
Run Code Online (Sandbox Code Playgroud)
代码在这里:
# app/models/game_user.rb
def self.node_calls_base_get_user(serial, game_name)
if Lock.get("user:#{id}") # Set up lock to prevent multiple users to be created
Lock.delete("user:#{id}")
end
return false
end
Run Code Online (Sandbox Code Playgroud)
锁定在库中定义:
# lib/lock.rb
class Lock
def self.get(key)
lock = CACHE.add("lock:#{key}", 1, 5) # Let lock autoexpire after 5 seconds
return true
end
end
Run Code Online (Sandbox Code Playgroud)
并且lib /文件夹会自动加载其余配置.
module Myapp
class Application < Rails::Application
...
# Custom directories with …Run Code Online (Sandbox Code Playgroud) 当我在Sinatra尝试这样做时,
class Comment
include DataMapper::Resource
property :id, Serial
property :body, Text
property :created_at, DateTime
end
get '/show' do
comment = Comment.all
@comment.each do |comment|
"#{comment.body}"
end
end
它返回此错误,
ERROR: undefined method `bytesize' for #<Comment:0x13a2248>
Run Code Online (Sandbox Code Playgroud)
有人能指出我正确的方向吗?
谢谢,
问题背景:
假设config/locales/en.yml中有一些非常重要的行对于存在至关重要.
en:
foo:
bar: "bubla!"
Run Code Online (Sandbox Code Playgroud)
所以我现在测试的方式是这样的
#spec/locals_spec.rb
require 'spec_helper'
describe I18n do
it do
I18n.t('date.datepicker').should be_kind_of(String)
end
end
Run Code Online (Sandbox Code Playgroud)
这样我只是确保翻译存在并且不会继续(例如'foo.bar.car.lol'
但我仍然不满意
问题:使用RSpec测试I18n翻译的最佳实践是什么?在spec文件夹中我应该放置它们?
ruby-on-rails internationalization rspec-rails ruby-on-rails-3
我正在使用jpegcam允许用户将网络摄像头照片设置为他们的个人资料照片.这个库最终将原始数据发布到我在rails控制器中获得的服务器,如下所示:
def ajax_photo_upload
# Rails.logger.info request.raw_post
@user = User.find(current_user.id)
@user.picture = File.new(request.raw_post)
Run Code Online (Sandbox Code Playgroud)
当您尝试保存request.raw_post时,这不起作用并且paperclip/rails失败.
Errno::ENOENT (No such file or directory - ????JFIF???
Run Code Online (Sandbox Code Playgroud)
我已经看到了制作临时文件的解决方案,但我很想知道是否有办法让Paperclip自动保存request.raw_post,而不必制作临时文件.有优雅的想法或解决方案吗?
UGLY SOLUTION(需要临时文件)
class ApiV1::UsersController < ApiV1::APIController
def create
File.open(upload_path, 'w:ASCII-8BIT') do |f|
f.write request.raw_post
end
current_user.photo = File.open(upload_path)
end
private
def upload_path # is used in upload and create
file_name = 'temp.jpg'
File.join(::Rails.root.to_s, 'public', 'temp', file_name)
end
end
Run Code Online (Sandbox Code Playgroud)
这很难看,因为它需要在服务器上保存一个临时文件.有关如何实现这一点的提示没有需要保存的临时文件?可以使用StringIO吗?
我有一个运行在ruby 1.8.7上的网站.我对传入的帖子进行了验证,检查以确保我们允许最多12000个字符.这些空格被计为字符,并且在帖子经过验证之前剥离了制表符和回车符.
这是经过验证的帖子http://pastie.org/5047582
在ruby 1.9中,字符串长度显示为11909,这是正确的.但是当我检查红宝石1.8.7的长度时,结果是12044.
我使用codepad.org运行这个ruby代码,它给了我http://codepad.org/OxgSuKGZ(输出长度为12044,这是错误的)但是当我在codeacademy.org的控制台中运行相同的代码时,字符串长度是11909.
谁能解释我为什么会这样?
谢谢
我正在尝试发出一个LOAD DATA LOCAL INFILE查询,使用rails 3.1.1下的mysql2 gem(0.3.11)将一些CSV数据加载到表中:
class Foo < ActiveRecord::Base
def self.load_csv
query = "LOAD DATA LOCAL INFILE 'test/foo.csv' REPLACE INTO TABLE foos LINES TERMINATED BY '\n' (title)"
ActiveRecord::Base.connection.execute(query)
end
end
Run Code Online (Sandbox Code Playgroud)
(这是一个重现此github问题的错误的示例应用程序).这在OS X(Lion)上出现故障,并出现以下错误:
Mysql2::Error: Malformed packet: LOAD DATA LOCAL INFILE 'test/foo.csv' REPLACE INTO TABLE foos LINES TERMINATED BY '
' (title)
Run Code Online (Sandbox Code Playgroud)
服务器上启用了本地infile:
mysql> show variables where variable_name like '%local%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| local_infile | ON |
+---------------+-------+
Run Code Online (Sandbox Code Playgroud)
并在application.rb上通过此指令在客户端上:
Mysql2::Client.default_query_options[:connect_flags] …Run Code Online (Sandbox Code Playgroud) 在Rails 3.1应用程序中,我想列出一堆我不知道的变量类对象(来自多态表)。对于那些具有命名路由的资源,我想在link_to呼叫中使用该路由。天真的方法,无需检查是否存在这样的路由(请使用HAML):
%ul
- @objects.each do |object|
%li= link_to object, url_for(object)
Run Code Online (Sandbox Code Playgroud)
undefined method 'foo_path'如果对象是Foo没有命名路由的类的实例(例如,因为未将其定义为资源),则将引发错误。是否有一种简单的方法(例如简单的方法调用)来确定对象或类的命名路由的存在?
编辑:
我想得到的是这样的:
%ul
- @objects.each do |object|
%li= link_to_if object.has_route?, object, url_for(object)
Run Code Online (Sandbox Code Playgroud) 我正在使用paranoia gem 来“软删除”记录。现在,我需要为关联模型立即加载这些记录,其中一些记录可能已被删除。Paranoia 将其添加default_scope到“偏执”模型中:
default_scope :conditions => { :deleted_at => nil }
Run Code Online (Sandbox Code Playgroud)
所以实际上,我有这些(简化的)模型:
class Product
has_many :orders
default_scope :conditions => { :deleted_at => nil }
end
class Order
belongs_to :product
end
Run Code Online (Sandbox Code Playgroud)
我想要实现的是在访问订单时立即加载产品:
Order.includes(:product)
Run Code Online (Sandbox Code Playgroud)
这(来自如何在 Rails3 中的关联关系上使用无作用域?)在这里不起作用:
Product.unscoped { Order.includes(:product) }
Run Code Online (Sandbox Code Playgroud)
我知道我可以创建自定义belongs_to关系来添加条件(如“渴望加载嵌套关联和作用域”),但我找不到删除现有关系的方法(如果可能的话)。
问题:如何防止将默认范围应用于急切加载查询?
actionmailer ×1
capistrano ×1
datamapper ×1
devise ×1
inflection ×1
macos ×1
mysql ×1
mysql2 ×1
paperclip ×1
routing ×1
rspec-rails ×1
ruby ×1
sidekiq ×1
sinatra ×1