不要用 preload_app!
就好了,参考 https://github.com/puma/puma/blob/master/examples/config.rb#L154-L159
如果使用 cap 部署,需要追加一段
on_restart do
ENV['BUNDLE_GEMFILE'] = Pathname.new(File.dirname(__FILE__)).realpath.parent.join('Gemfile')
end
指定最新部署代码的 Gemfile
图片的事好说,国内视频站的嵌入视频目前无解
你可能是 1.29.0
版 rvm 的受害者,降级一下 rvm get 1.28.0
给 Growing 那补了个空格...
还是放在 9-11 月份吧~ 差不多 5 月份开始调整心态,这阵子我在充电准备外出需要的吹牛材料
要自己写
👍
完全同意楼主对配置的管理方式
还在想北京年后聚会分享这方面东西,我补充一点小技巧
有一些配置,比如 mailer 相关的,通常需要这样来配置
if production?
config.action_mailer.delivery_method = :smtp
# ...
elsif devlopment?
config.action_mailer.delivery_method = :smtp
# ...
end
用 RailsConfig 的话,还是要硬编码配置项
这里大致了解 Rails 下边各组件如何利用 Rails.application.config
的话,可以做这样一个 Monkey Patch(当然也可以换别的形式)
module ActionMailer
class Railtie < Rails::Railtie
initializer 'action_mailer.set_configs.set_yaml_configs', before: 'action_mailer.set_configs' do |app|
app.paths.add 'config/mailer', with: 'config/mailer.yml'
configure = app.config_for('mailer').deep_symbolize_keys
configure.each do |key, value|
setter = "#{key}="
unless ActionMailer::Base.respond_to? setter
raise "Can't set option `#{key}` to ActionMailer, make sure that options in config/mailer.yml are valid."
end
app.config.action_mailer.send(setter, value)
end
end
end
end
注意用 Initializer 的话要了解下 Rails 在 Initializer 上使用的 TSort 算法,保证初始化 block 的执行顺序
然后编写 config/mailer.yml
即可
default: &default
perform_caching: false
raise_delivery_errors: false
perform_deliveries: true
delivery_method: :smtp
deliver_later_queue_name: 'mailers'
development:
<<: *default
smtp_settings:
# see https://github.com/sj26/mailcatcher
address: 127.0.0.1
port: 1025
domain: localhost
default_options:
reply_to: [email protected]
from: [email protected]
test:
<<: *default
delivery_method: :test
production:
<<: *default
smtp_settings:
address:
domain:
port: 80
user_name:
password:
authentication: :plain
default_options:
reply_to:
from:
在容器环境下,或者守护进程式设计替代 Crontab 可以看一下 clockwork
加个精吧,方便用 Windows 的人,不过还是看好 WSL 的成熟~
另外推荐一个 Terminal 叫 MobaXTerm,这个是我在 Win 下用过最强大的 Terminal 了,比 Cmder 要好用很多(当然也复杂了很多...),缺点就是启动速度慢
等明年春季的 Creator Update,利用 WSL 做 Ruby 开发,应该没啥问题了,添加了目前缺失的 syscall 支持还有升级 Ubuntu User land 到 16.04
几年前自己的工具箱里的 helper 还能用应该 https://github.com/jasl/a_rails_start_up_omakase/blob/master/app/helpers/application_helper.rb#L37
#7 楼 @flowerwrong 哦对,我想起来了...过去我也弄过这事... 另外 rails-assets bower-rails 之类,对于结构太奇葩的项目,都有问题,我最近本来在尝试这样管理 assets,后来还是退回老的方式了
#2 楼 @flowerwrong
如果可以复制进 app 或者是在项目目录范围的话 config.assets.paths << Rails.root.join('vendor', 'assets', 'fonts')
就可以享受到 assets pipeline 了
这块的技巧你直接建立新的 rails 5 工程,看一下 config/initializers/assets.rb
里面都有注释提示的
我最近也试了一下 bower-rails
但是很多项目文件结构太乱,导致总会让 assets pipeline 多编译很多没用的东西。。。
粗暴的话
FONT_TYPES = %w(*.eot *.woff *.woff2 *.ttf *.otf *.svg)
Rails.application.config.assets.precompile += FONT_TYPES
也接受 Proc
的,所以可以搞类似
ASSETS_TYPES = %w(.png .gif .jpg .eot .woff .woff2 .ttf .otf .svg)
config.assets.precompile << Proc.new { |path| !(path =~ /\/docs\//) && File.extname(path).in?(ASSETS_TYPES) }
但是这样粗暴的话,就会引入很多没用的文件进来,比较好的方法还是首选 gem 形态的 assets